Представьте, что после тяжелого рабочего дня вы решили отдохнуть и провести вечер за просмотром фильма. Вкусная еда уже готовится, любимый плед уютно свернулся на кресле — а вы всё ещё не выбрали, что же посмотреть! Фильмов много — и с каждым годом становится всё больше. Чем их больше, тем больше разных оценок. Чем больше оценок, тем сложнее сделать выбор. Однако не время сдаваться! Это приложение - бэкенд для сервиса, который работает с фильмами и оценками пользователей, а также возвращает топ-10 фильмов, рекомендованных к просмотру. Теперь ни вам, ни вашим друзьям не придётся долго размышлять, что посмотреть вечером.
- Работа с пользователями (User):
- Добавить пользователя. Эндпоинт: POST /users
- Обновить данные о пользователе. Эндпоинт: PUT /users
- Получить список всех пользователей. Эндпоинт: GET /users
- Получить пользователя по id. Эндпоинт: GET /users/{id}
(id пользователя передается в переменную пути) - Добавить пользователя в друзья. Эндпоинт: PUT /users/{id}/friends/{friendId}
(id пользователей передаются в переменные пути) - Удалить пользователя из друзей. Эндпоинт: DELETE /users/{id}/friends/{friendId}
(id пользователей передаются в переменные пути) - Получить список друзей пользователя. Эндпоинт: GET /users/{id}/friends
(id пользователя передается в переменную пути) - Получить список общих друзей. Эндпоинт: GET /users/{id}/friends/common/{otherId}
(id пользователей передаются в переменные пути)
- Работа с фильмами (Film):
- Добавить фильм. Эндпоинт: POST /films
- Обновить данные о фильме. Эндпоинт: PUT /films
- Получить список всех фильмов. Эндпоинт: GET /films
- Получить фильм по id. Эндпоинт: GET /films/{id}
(id фильма передается в переменную пути) - Поставить лайк фильму. Эндпоинт: PUT /films/{id}/like/{userId}
(id фильма и пользователя передаются в переменные пути) - Удалить лайк у фильма. Эндпоинт: DELETE /films/{id}/like/{userId}
(id фильма и пользователя передаются в переменные пути) - Получить список самых популярных фильмов (на основе лайков). Эндпоинт: GET /films/popular
- Работа с жанрами фильмов (Genre):
- Получить список всех жанров. Эндпоинт: GET /genres
- Получить информацию о конкретном жанре фильма. Эндпоинт: GET /genres/{id}
(id жанра фильма передается в переменную пути)
- Работа с рейтингом возрастных ограничений (MPA):
- Получить список всех рейтингов возрастных ограничений. Эндпоинт: GET /mpa
- Получить информацию о конкретном рейтинге возрастных ограничений. Эндпоинт: GET /mpa/{id}
(id рейтинга возрастных ограничений передается в переменную пути)
В проекте используется база данных H2.
Ниже представлена схема базы данных:
Тестировать приложение вручную — трудоёмкий процесс, который сопряжён со многими ограничениями. Использовать Postman-запросы проще, но такой способ не позволяет протестировать имплементацию методов. Реализовано интеграционное тестирование (англ. integration testing). С помощью него можно проверить работу приложения с зависимостями — например, с базой данных. Резидентная база данных обеспечит автономность ваших интеграционных тестов — перед каждым их запуском Spring будет создавать новую, чистую БД.