Skip to content

Add most populars - #4

Merged
Kirill-Kazantcev merged 3 commits into
developfrom
add-most-populars
Oct 7, 2026
Merged

Kirill-Kazantcev merged 3 commits into
developfrom
add-most-populars

Conversation

@Kirill-Kazantcev

Copy link
Copy Markdown
Collaborator

Что сделано

В эндпоинт популярных фильмов добавлена опциональная фильтрация:

GET /films/popular?count={limit}&genreId={genreId}&year={year}

  • count — количество возвращаемых фильмов (по умолчанию 10, должно быть положительным).
  • genreId — опциональный; возвращаются только фильмы указанного жанра.
  • year — опциональный; возвращаются только фильмы, выпущенные в указанном году.

Если заданы оба фильтра, они применяются вместе через AND.

Обратная совместимость

GET /films/popular и GET /films/popular?count=N продолжают работать
как раньше — новые query-параметры опциональны.

Детали реализации

  • SQL-запрос собирается динамически: блок WHERE добавляется только
    тогда, когда задан хотя бы один фильтр. Для фильтра по жанру используется
    подзапрос (f.id IN (SELECT film_id FROM film_genres WHERE genre_id = ?)),
    чтобы избежать дублей строк из-за JOIN с фильмом, у которого несколько жанров.
  • Фильтр по году реализован через YEAR(f.release_date) = ?.
  • FilmService валидирует, что count > 0, year > 0, а также что
    указанный жанр существует (иначе 404).

Тесты

Фильтрация покрыта интеграционными тестами на JdbcTemplate:

  • фильтр только по жанру;
  • фильтр только по году;
  • оба фильтра одновременно;
  • без фильтров (обратная совместимость).

@Kirill-Kazantcev
Kirill-Kazantcev changed the base branch from main to develop October 6, 2026 18:28

@ksupyl ksupyl left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Посмотрела, всё ок 👍
Фильтры необязательные, значения идут через параметры, фильмы без лайков не теряются, жанры подтягиваются, тесты на все комбинации есть.

Пара мыслей на будущее, не блокеры:
— YEAR() есть в H2, но нет в PostgreSQL. EXTRACT(YEAR FROM f.release_date) работает в обеих.
— Сортировка по популярности понадобится ещё в общих фильмах, поиске и фильмах режиссёра. У них нет count, так что LIMIT потом вынесем из хвоста запроса отдельно.

И просьба: влей, пожалуйста, через Squash and merge с заголовком
feat: add genre and year filters to popular films
Тогда в develop ляжет один коммит в нашем формате, а Trigger CI туда не попадёт)

@Roman32-gif Roman32-gif left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Всё посмотрел, вопросов не возникло)

@Kirill-Kazantcev
Kirill-Kazantcev merged commit 10cab49 into develop Oct 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Вывод самых популярных фильмов по жанру и годам. 2 SP

3 participants