- дружба
- рейтинги фильмов
- лайки / дизлайки
- список рекомендаций по схожей модели лайков / дизлайков
Добавлены поля в таблицу films
- rate_score INTEGER DEFAULT 0,
- average_rate REAL,
Добавлено поле в таблицу likes
- rate INTEGER DEFAULT 10,
Если Like приходит без rate => тогда выставляем максимум 10
Операции
- Add - добавить
- Remove - удалить
- Update -> если при добавлении лайк уже стоит, тогда обновляем значение rate
- добавлена проверка на валидный rate От 1 до 10
- добавлены тесты postman: postman\develop-add-mark-LikesRate.json
- интеграционное тестирование
- Вам пригодятся созданные ранее интерфейсы UserStorage и FilmStorage. Напишите для них новую имплементацию — например, UserDbStorage и FilmDbStorage.
- Эти классы будут DAO — объектами доступа к данным.
- сейчас вы будете работать с другой базой. Она называется H2.
- подключить зависимости
- Сконфигурируйте базу данных для рабочего режима с помощью файла настроек application.properties
- Соберите SQL-запросы, формирующие структуру вашей базы, в отдельный файл в src/main/resources с названием schema.sql — так схема будет создаваться заново при каждом запуске приложения.
- Если вам нужны некоторые данные в базе, их инициализация обычно описывается в файле data.sql
- В этом спринте вы будете работать в новой ветке. Назовите её add-database. Название ветки важно, потому что к ней привязаны тесты.
В этом задании вы будете проектировать базу данных для проекта, основываясь на уже существующей функциональности. Вносить какие-либо изменения в код не потребуется.
- Убедитесь, что ваше приложение возвращает корректные HTTP-коды
- 400 — если ошибка валидации: ValidationException;
- 404 — для всех ситуаций, если искомый объект не найден;
- 500 — если возникло исключение.
Обеспечим возможность пользователям добавлять друг друга в друзья и ставить фильмам лайки.
- Создайте UserService, который будет отвечать за такие операции с пользователями, как
- добавление в друзья,
- удаление из друзей,
- вывод списка общих друзей.
- Создайте FilmService, который будет отвечать за операции с фильмами,
- добавление и удаление лайка,
- вывод 10 наиболее популярных фильмов по количеству лайков.
- каждый пользователь может поставить лайк фильму только один раз.
- Добавьте к ним аннотацию @Service — тогда к ним можно будет получить доступ из контроллера.
-
Вынесите хранение данных о фильмах и пользователях в отдельные классы.
-
Назовём их «хранилищами» (англ. storage) — так будет сразу понятно, что они делают.
-
Создайте интерфейсы FilmStorage и UserStorage, в которых будут определены методы: добавления, удаления и модификации объектов.
-
Создайте классы InMemoryFilmStorage и InMemoryUserStorage, имплементирующие новые интерфейсы, и перенесите туда всю логику хранения, обновления и поиска объектов.
-
Добавьте к InMemoryFilmStorage и InMemoryUserStorage аннотацию @Component, чтобы впоследствии пользоваться внедрением зависимостей и передавать хранилища сервисам.
-
Чтобы объединить хранилища, создайте новый пакет storage. В нём будут только классы и интерфейсы, имеющие отношение к хранению данных.
- Создайте новую ветку, которая будет называться add-friends-likes
А для улучшения рекомендаций по просмотру хорошо бы объединить пользователей в комьюнити.
В этот раз улучшим API приложения до соответствия REST, а также изменим архитектуру приложения с помощью внедрения зависимостей.
- Добавьте тесты для валидации
- Воспользуйтесь библиотекой slf4j
- объявляйте логер для каждого класса
- акже можете применить аннотацию @Slf4j
- Film
- название не может быть пустым;
- максимальная длина описания — 200 символов;
- дата релиза — не раньше 28 декабря 1895 года;
- продолжительность фильма должна быть положительной.
- User
- электронная почта не может быть пустой и должна содержать символ @;
- логин не может быть пустым и содержать пробелы;
- имя для отображения может быть пустым — в таком случае будет использован логин;
- дата рождения не может быть в будущем.
- пакет controller
- Создайте два класса-контроллера
- FilmController
- UserController
- Добавьте в классы-контроллеры эндпоинты с подходящим типом запроса
- Создайте пакет model
- Добавьте в него два класса — Film и User
- добавить поля для Film
- добавить поля для User
- прописать Lombok @Data
- В репозитории создайте ветку controllers-films-users
- Создайте заготовку проекта с помощью Spring Initializr
Template repository for Filmorate project.