Это сервис, который будет работать с фильмами и оценками пользователей, а также возвращать топ фильмов, рекомендованных к просмотру
Приложение умеет делать следующее:
- Хранит фильмы
- Хранит пользователей
- Создаёт и обновляет фильмы
- Создаёт и обновляет пользователей
- Выводит список всех фильмов
- Выводит список всех пользователей
- Получает каждый фильм и данные о пользователях по их уникальному идентификатору
- Выводит список всех жанров и рейтингов МПА фильмов
- Получает каждый жанр и рейтинг МПА фильмов по их уникальному идентификатору
- Добавляет в друзья другого пользователя
- Удаляет из друзей другого пользователя
- Выводит список пользователей, являющихся друзьями пользователя
- Выводит список друзей, общих с другим пользователем
- Пользователь ставит лайк фильму
- Пользователь удаляет лайк с фильма
- Возвращает список из первых фильмов по количеству лайков
- Выводит топ-N фильмов по количеству лайков
- Реализована функциональность «Фильмы по режиссёрам», которая предполагает добавление к фильму информации о его режиссёре
- Реализована функциональность «Отзывы» на фильмы
- Реализована функциональность «Поиск» по названию фильмов и по режиссёру
- Реализована функциональность «Общие фильмы» - вывод общих с другом фильмов с сортировкой по их популярности
- Реализована функциональность «Рекомендации» - простая рекомендательная система для фильмов
- Реализована функциональность «Лента событий» - возможность просмотра последних событий на платформе
- Реализована функциональность "Оценки" - возможность оценивать фильмы пользвателям, а также делать все сортировки и рекомендации по оценкам
Приложение написано на Java, использует Spring Boot и Maven, API соответствует REST, данные хранятся в БД H2. Тестовое покрытие кода 34%. Пример кода:
public class Main {
public static void main(String[] args) {
}
}
users
Содержит данные о пользователях Таблица включает такие поля:
- первичный ключ
user_id
- идентификатор пользователя user_name
- имя для отображения пользователяemail
- электронная почта пользователяlogin
- логин пользователяbirthday
- дата рождения пользователя
films
Содержит данные о фильмах Таблица включает такие поля:
- первичный ключ
film_id
- идентификатор фильма film_name
- название фильмаdescription
- описание фильмаrelease_date
- дата релиза фильмаduration
- продолжительность фильмаrate
- рейтинг фильма- внешний ключ
rating_mpa_id
(отсылает к таблицеrating_mpa
) - идентификатор рейтинга Ассоциации кинокомпаний (МРА)
friends
Содержит данные о друзьях Таблица включает такие поля:
- составной первичный ключ
request_friend_id
(отсылает к таблицеusers
) - идентификатор пользователя, который отправил запрос на добавление другого пользователя в друзья - составной первичный ключ
response_friend_id
(отсылает к таблицеusers
) - идентификатор пользователя, которому отправили запрос на добавление в друзья
marks
Содержит данные о пользователях, фильмах, оценках Таблица включает такие поля:
- составной первичный ключ
user_id
(отсылает к таблицеusers
) - идентификатор пользователя, который оценил фильм - составной первичный ключ
film_id
(отсылает к таблицеfilms
) - идентификатор фильма, который оценил пользователь mark
- оценка от 1 до 10 включительно
genres
Содержит данные о жанрах фильмов Таблица включает такие поля:
-
первичный ключ
genre_id
- идентификатор жанра -
genre_name
- название жанраНапример, такие:
Комедия,
Драма,
Мультфильм,
Триллер,
Документальный,
Боевик.
film_genre
Содержит данные о фильмах и жанрах, которые могут быть у них Таблица включает такие поля:
- составной первичный ключ
film_id
(отсылает к таблицеfilms
) - идентификатор фильма - составной первичный ключ
genre_id
(отсылает к таблицеgenres
) - идентификатор жанра
rating_mpa
Содержит данные о рейтинге Ассоциации кинокомпаний (МРА) Таблица включает такие поля:
-
первичный ключ
rating_mpa_id
- идентификатор рейтинга -
rating_mpa_name
- название рейтингаЗначения могут быть следующими:
G
— у фильма нет возрастных ограничений,PG
— детям рекомендуется смотреть фильм с родителями,PG-13
— детям до 13 лет просмотр не желателен,R
— лицам до 17 лет просматривать фильм можно только в присутствии взрослого,NC-17
— лицам до 18 лет просмотр запрещён.
directors
Содержит данные о режиссёрах фильмов Таблица включает такие поля:
- первичный ключ
director_id
- идентификатор режиссёра director_name
- название режиссёра
film_director
Содержит данные о фильмах и режиссёрах, которые могут быть у них Таблица включает такие поля:
- составной первичный ключ
film_id
(отсылает к таблицеfilms
) - идентификатор фильма - составной первичный ключ
director_id
(отсылает к таблицеdirectors
) - идентификатор режиссёра
reviews
Содержит данные об отзывах на фильмы Таблица включает такие поля:
- первичный ключ
review_id
- идентификатор отзыва review_content
- описание отзываis_positive
- является ли отзыв позитивным- внешний ключ
user_id
(отсылает к таблицеusers
) - идентификатор пользователя, который оставил отзыв о фильме - внешний ключ
film_id
(отсылает к таблицеfilms
) - идентификатор фильма useful
- рейтинг полезности
feeds
Содержит данные о событиях Таблица включает такие поля:
- первичный ключ
event_id
- идентификатор события - внешний ключ
user_id
(отсылает к таблицеusers
) - идентификатор пользователя, который совершил событие timestamp
- отметка времени, когда совершено событиеevent_type
- одно из значений LIKE, REVIEW или FRIENDoperation
- одно из значениий REMOVE, ADD, UPDATEentity_id
- идентификатор сущности, с которой произошло событие
-- получение всех фильмов
SELECT *
FROM films;
-- получение всех пользователей
SELECT *
FROM users;
-- топ 10 наиболее популярных фильмов
SELECT f.film_id,
f.film_name,
COUNT(l.like_id) AS count_likes
FROM films AS f
LEFT OUTER JOIN likes AS l ON f.film_id = l.film.id
GROUP BY f.film_id
ORDER BY count_likes DESC
LIMIT 10;
-- список общих друзей с другим пользователем
SELECT f1.response_friend_id
FROM friends AS f1
WHERE f1.request_friend_id = 1
AND f1.response_friend_id IN
(SELECT response_friend_id
FROM friends
WHERE request_friend_id = 3);