Фильмов много и с каждым годом их становится всё больше. Чем их больше, тем больше разных оценок. Чем больше оценок, тем сложнее сделать выбор.
Filmorate - это пользовательское приложение, которое поможет определиться с выбором фильмов, предоставляя не только большой список фильмов с возможностью использования рейтинговой системы, но и полную информацию о каждом фильме с ревью от пользователей.
Теперь ни вам, ни вашим друзьям не придётся долго размышлять, что посмотреть вечером.
Filmorate предоставляет возможность:
- получения списока фильмов;
- изучения подробной информации о каждом фильме;
- посмотра рейтинга фильмов;
- получения рекомендаций к просмотру;
- оценки и составления ревью к просмотренному фильму;
- получения ленты активности пользователя.
Приложение Filmorate было разработано самостоятельно, а позже доработанно в групповом проекте из 5 человек. В групповой разработке мной были реализованны функции приложения, связанные с режиссурой фильмов и лентой событий. Позже, в личном репозитории я реализовал 10-бальную оценку фильмов и доработал README.
Программа написана на языке Java с использованием IntelliJ IDEA. Сборка проекта реализуется с помощью Maven
Для хранения данных используется H2 база данных.
films
Содержит информацию о фильмах.
film_id- идентификатор фильма (первичный ключ);name- название фильма;description- описание фильма;release_date- дата выпуска фильма;duration- продолжительность фильма;mpa_id- идентификатор рейтинга (внешний ключ).
users
Содержит информацию о пользователях.
user_id— идентификатор пользователя (первичный ключ);email- адрес электронной почты пользователя;login- логин пользователя;name- имя пользователя;birthday- дата рождения пользователя.
mpa
Содержит информацию о рейтинге Ассоциации кинокомпаний (МРА) фильма.
mpa_id— идентификатор рейтинга (первичный ключ);name— название рейтинга;description- описание аббревиатуры рейтинга.
genres
Содержит информацию о жанрах фильмов.
genre_id— идентификатор жанра (первичный ключ);name— название жанра.
film_genres
Содержит информацию о жанрах каждого фильма.
film_id- идентификатор фильма (внешний ключ);genre_id- идентификатор жанра(внешний ключ).
directors
Содержит информацию о режиссёрах фильмов.
director_id— идентификатор режиссёра (первичный ключ);name— имя режиссёра.
film_directors
Содержит информацию о режиссёрах каждого фильма.
film_id- идентификатор фильма (внешний ключ);director_id- идентификатор режиссёра (внешний ключ).
friends
Содержит данные о дружеских отношениях между пользователями.
user_id- идентификатор пользователя (внешний ключ);friend_id— идентификатор пользователя друга (внешний ключ);status- статус связи, может принимать значения 0 или 1.
film_likes
Содержит информацию о фильмах и лайках пользователей.
film_id- идентификатор фильма (внешний ключ);user_id- идентификатор пользователя (внешний ключ).
reviews
Содержит информацию об отзывах пользователей на фильмы.
review_id- идентификатор отзыва (первичный ключ);content- текстовое содержание отзыва;positive- тип отзыва (позитивный или негативный);user_id- идентификатор пользователя (внешний ключ);film_id- идентификатор фильма (внешний ключ).
review_useful
Содержит информацию об оценках пользователями отзывов.
review_id- идентификатор отзыва (внешний ключ);user_id- идентификатор пользователя (внешний ключ);scope- оценка отзыва (1 или -1).
events
Содержит информацию о последних событиях на платформе.
event_id- идентификатор отзыва (первичный ключ);timestamp- точка времени совершения события;user_id- идентификатор пользователя (внешний ключ);event_type- тип события (LIKE, REVIEW или FRIEND);operation- тип совершённой операции (REMOVE, ADD или UPDATE);entity_id- идентификатор сущности, с которой произошло событие.
Получение всех пользователей:
SELECT *
FROM users;
Получение пользователя по id:
SELECT *
FROM users
WHERE user_id = 1;
Получение всех друзей пользователя:
SELECT *
FROM users
WHERE user_id IN (SELECT friend_id
FROM friends
WHERE user_id = 1)
Получение общих друзей двух пользователей:
SELECT *
FROM users
WHERE user_id IN (SELECT
friends.friend_id
FROM friends as friends
INNER JOIN friends as other_friends
ON friends.friend_id = other_friends.friend_id
WHERE friends.user_id = 1 and other_friends.user_id = 2)
Получение всех фильмов:
SELECT *
FROM films;
Получение фильма по id:
SELECT *
FROM films
WHERE film_id = 1;
Вывод 10 популярных фильмов:
SELECT *
FROM films
WHERE film_id in (SELECT TOP 10
films.film_id
FROM films
LEFT FOIN film_likes
ON films.film_id = film_likes.film_id
GROUP BY films.film_id
ORDER BY COUNT(film_likes.user_id) DESC)

