Skip to content

Спринт 3: Хранение в базе данных H2 (DAO, жанры, рейтинги MPA, тесты хранилищ) - #3

Merged
ksupyl merged 19 commits into
mainfrom
add-database
Oct 4, 2026
Merged

ksupyl merged 19 commits into
mainfrom
add-database

Conversation

@ksupyl

@ksupyl ksupyl commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Здравствуйте! 👋
Направляю на проверку третий этап проекта Filmorate.

Что было сделано:

  • Хранение перенесено из памяти в базу данных H2: схема — schema.sql (7 таблиц), справочники жанров и рейтингов — data.sql.
  • Реализованы DAO на JdbcTemplate: FilmDbStorage, UserDbStorage, GenreDbStorage, MpaDbStorage и RowMapper для каждой сущности.
  • Сервисы переключены на хранилища в базе через @Qualifier; in-memory реализации оставлены для unit-тестов.
  • Добавлены модели Genre и Mpa, эндпоинты GET /genres, GET /genres/{id}, GET /mpa, GET /mpa/{id}.
  • Фильм хранит рейтинг и жанры; жанры в ответе — с названиями, без дублей, по порядку id.
  • Дружба стала односторонней: одна запись в friendship — заявка одного пользователя другому; подтверждённая (взаимная) дружба — когда второй тоже добавляет первого и в таблице две встречные строки.
  • Лайки хранятся в film_likes; популярные фильмы считаются в SQL (LEFT JOIN, GROUP BY, сортировка по числу лайков).
  • Неизвестный рейтинг или жанр при создании и обновлении фильма — 404.
  • Написаны интеграционные тесты для всех хранилищ (@JdbcTest, база в памяти).
  • Хранилища жанров и рейтингов работают через интерфейсы GenreStorage и MpaStorage.

Дополнительно:

  • Жанры сохраняются пакетно (batchUpdate), а для списка фильмов загружаются одним запросом, без запроса на каждый фильм.
  • После сохранения фильм перечитывается из базы, чтобы в ответе были названия рейтинга и жанров.
  • В README добавлены ER-диаграмма и описание схемы базы, примеры SQL-запросов, новые эндпоинты и описание этапа.

Проверка:

  • mvn test — 45 тестов, checkstyle без нарушений.
  • Postman-коллекция add-database — 144/144 на чистой базе.

Буду рада ревью и обратной связи!)

С уважением,
Ксения

@irek-valiev

irek-valiev commented Sep 26, 2026 •

Copy link
Copy Markdown

Ксения, привет)) Отличная работа! Из подсказок единственное, что для фильма наличие рейтинга обязательное условие, но это скорее бизнесовая часть, поэтому не стал это как замечание указывать. Еще по заданию требуется убрать inMemory реализацию. Но у тебя она как бы и не мешает))

@ksupyl

ksupyl commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

Ирек, спасибо за ревью!)

Про рейтинг поняла: по смыслу фильм без него не бывает, учту.
InMemory-хранилища оставила, потому что на них держатся юнит-тесты сервисов и контроллеров. Но раз по заданию их нужно было убрать — тоже учту.

@ksupyl
ksupyl merged commit 8bbd205 into main Oct 4, 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 participants