Бэкенд для сервиса, который будет работать с фильмами и оценками пользователей, а также возвращать топ лучших фильмов, рекомендованных к просмотру.
Спринт 9
- Модели данных — Film и User
- Хранение данных в памяти приложения
- REST-контроллеры: FilmController будет обслуживать фильмы, а UserController — пользователей.
- Валидация данных, которые приходят в запросе на добавление нового фильма или пользователя. Проверяется тестами Unit5
- Логирование
Спринт 10
- Архитектура и новая логика проекта: интерфейсы FilmStorage и UserStorage, классы InMemoryFilmStorage и InMemoryUserStorage, классы UserService и FilmService.
- Зависимости -> @Service, @Component, @Autowired
- API -> соответствие REST
- ExceptionHandler для централизованной обработки ошибок
Спринт 11: Промежуточное ТЗ
- Проектирование базы данных, создание схемы
- Примеры запросов для основных операций приложения.
Спринт 11: Итоговое ТЗ
- ...
- ...
Получение списка всех фильмов
SELECT *
FROM films;Запрос на вывод фильма по id
SELECT *
FROM films
WHERE film_id = <id> Вывод 10 самых популярных фильмов
SELECT films.film_id,
films.name,
COUNT(*) as likes_count
FROM film_likes JOIN films ON film_likes.film_id = films.film_id
GROUP BY films.film_id, films.name
ORDER BY likes_count DESC
LIMIT 10;Запрос на вывод всех пользователей
SELECT *
FROM users;Вывод пользователя по id
SELECT *
FROM users
WHERE user_id = <id>;Вывод всех друзей определенного пользователя
SELECT users.name, friends.friend_id, friends.frienship_status
FROM friends JOIN users ON friends.friend_id = users.user_id
WHERE friends.user_id = <user_id>;
-- <user_id> - это значение id пользователя, для которого мы хотели бы получить его друзей.Вывод общих друзей для двух пользователей (например, с id 1 и 2)
SELECT f1.friend_id
FROM friends f1 JOIN friends f2 ON f1.friend_id = f2.friend_id
WHERE f1.user_id = 1
AND f2.user_id = 2;Получение списка фильмов, вышедших в определенном году
SELECT f.name,
EXTRACT(YEAR FROM f.release_date) AS release_year,
FROM films f
WHERE f.release_year = 2020;Получение списка друзей для заданного пользователя
SELECT us.name
FROM friends fr
INNER JOIN users us ON us.user_id = fr.friend_id
WHERE fr.user_id = 12;Получение списка фильмов определенного жанра
SELECT f.name AS title,
EXTRACT(YEAR FROM f.release_date) AS release_year,
g.name AS genre
FROM films f
INNER JOIN film_genre fg ON fg.film_id = f.film_id
INNER JOIN genre g ON g.genre_id = fg.genre_id
WHERE g.name = 'Комедия';Количество пользователей, у которых день рождения сегодня
SELECT COUNT(user_id)
FROM users
WHERE EXTRACT(DAY FROM birthday) = EXTRACT(DAY FROM NOW())
AND EXTRACT(MONTH FROM birthday) = EXTRACT(MONTH FROM NOW());