Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Filmorate

Filmorate picture

Описание

Фильмов много и с каждым годом их становится всё больше. Чем их больше, тем больше разных оценок. Чем больше оценок, тем сложнее сделать выбор.

Filmorate - это пользовательское приложение, которое поможет определиться с выбором фильмов, предоставляя не только большой список фильмов с возможностью использования рейтинговой системы, но и полную информацию о каждом фильме с ревью от пользователей.

Теперь ни вам, ни вашим друзьям не придётся долго размышлять, что посмотреть вечером.

Функционал

Filmorate предоставляет возможность:

  • получения списока фильмов;
  • изучения подробной информации о каждом фильме;
  • посмотра рейтинга фильмов;
  • получения рекомендаций к просмотру;
  • оценки и составления ревью к просмотренному фильму;
  • получения ленты активности пользователя.

Особенности разработки

Приложение Filmorate было разработано самостоятельно, а позже доработанно в групповом проекте из 5 человек. В групповой разработке мной были реализованны функции приложения, связанные с режиссурой фильмов и лентой событий. Позже, в личном репозитории я реализовал 10-бальную оценку фильмов и доработал README.

Программа написана на языке Java с использованием IntelliJ IDEA. Сборка проекта реализуется с помощью Maven

Для хранения данных используется H2 база данных.

Схема

Filmorate DB structure

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)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages