Repository navigation
Add most populars - #4
Conversation
ksupyl
left a comment
There was a problem hiding this comment.
Посмотрела, всё ок 👍
Фильтры необязательные, значения идут через параметры, фильмы без лайков не теряются, жанры подтягиваются, тесты на все комбинации есть.
Пара мыслей на будущее, не блокеры:
— 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
left a comment
There was a problem hiding this comment.
Всё посмотрел, вопросов не возникло)
Что сделано
В эндпоинт популярных фильмов добавлена опциональная фильтрация:
GET /films/popular?count={limit}&genreId={genreId}&year={year}count— количество возвращаемых фильмов (по умолчанию 10, должно быть положительным).genreId— опциональный; возвращаются только фильмы указанного жанра.year— опциональный; возвращаются только фильмы, выпущенные в указанном году.Если заданы оба фильтра, они применяются вместе через
AND.Обратная совместимость
GET /films/popularиGET /films/popular?count=Nпродолжают работатькак раньше — новые query-параметры опциональны.
Детали реализации
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: