Skip to content

Repository files navigation

Java-filmorate

Данное приложение является бэкендом сервиса, позволяющего выбрать фильм или сериал для просмотра, и обладающего рекомендательной системой. Ключевыми особенностями приложения являются:

  • Хранение информации о пользователях и фильмах в базе данных Н2.
  • Добавление оценок и комментариев пользователей к фильмам.
  • Добавление пользователей в друзья с возможностью последующего удаления из друзей.
  • Составление TOP-n фильмов по рейтингу.
  • Вывод списка общих с другом фильмов с их сортировкой по популярности.
  • Рекомендательная система поиска фильмов по пользователям с пересечением по максимальному числу лайков.
  • Лента событий

Стек проекта: Java, Spring Boot, Spring Framework, Lombok, Maven, JUnit, JdbcTemplate, H2, SQL, REST, SLF4J

В данный коллективный проект были добавлены следующие функциональности:

  • "Фильмы по режиссерам" (ответственный Владимир Курнаков, ветка add-director).
  • "Отзывы" (ответственный Мартынов Иван, тимлид, ветка add-reviews).
  • "Удаление фильмов и пользователей" (ответственная Мария Лукьянова, ветка add-remove-endpoint).
  • "Общие фильмы" (ответственная Мария Лукьянова, ветка add-common-films).
  • "Рекомендации" (ответственная Гюзяль Сергейчук, ветка add-recommendations).
  • "Поиск" (ответственная Ольга Лизунова, ветка add-search).
  • "Лента событий" (ответственный Павел Трофимович, ветка add-feed).
  • "Популярные фильмы" (ответственный Павел Трофимович, ветка add-most-populars).

С целью реализации представленных выше возможностей были созданы:

Эндпойнты пути /users:
  • POST /users - создание пользователя.
  • PUT /users - редактирование пользователя.
  • GET /users - получение коллекции всех пользователей.
  • GET /users/{id} - получение информации о пользователе по его идентификатору.
  • PUT /users/{id}/friends/{friendId} - добавление в друзья (одностороннее).
  • DELETE /users/{id}/friends/{friendId} -удаление пользователя из друзей (одностороннее).
  • GET /users/{id}/friends - получение коллекции друзей пользователя с идентификатором id.
  • GET /users/{id}/friends/common/{otherId} - получение списка друзей, общих для пользователей с идентификаторами id и otherId.
  • DELETE /users/{userId} - удаление пользователя.
  • GET /users/{id}/feed - возвращает ленту пользователя в виде коллекции.
  • GET /users/{id}/recommendations - получение рекомендаций в виде списка по фильмам для целевого пользователя.
Эндпойнты пути /films:
  • POST /films - создание фильма.
  • PUT /films - редактирование фильма.
  • GET /films - получение коллекции всех фильмов.
  • GET /films/{id} - получение фильма по его идентификатору.
  • PUT /films/{id}/like/{userId} - поставить лайк фильму с идентификатором id от пользователя с идентификатором userId.
  • DELETE /films/{id}/like/{userId} - удалить лайк фильму с идентификатором id от пользователя с идентификатором userId.
  • GET /films/popular?count={count} - получить список из count фильмов по количеству лайков. Если значение параметра count не задано, то будет получено первые 10 фильмов.
  • DELETE /films/{filmId} - удаление фильма по его идентификатору.
  • GET /films/common?userId={userId}&friendId={friendId} - возвращает список фильмов, общий для пользователей с идентификаторами userId и fiendId, отсортированный по популярности.
  • GET /films/director/{directorId} - возвращает список фильмов режиссера с идентификатором directorId.
  • GET /films/search?query={query}&by={by} - возвращает список отсортированных по популярности фильмов. Параметр query - текст для поиска, параметр by может принимать значения director (производится поиск по режиссеру), title (по названию), также оба параметра могут следовать через запятую при поиске по режиссеру и названию.
Эндпойнты пути /director:
  • GET /directors - получение множества всех режиссеров.
  • POST /directors - добавление режиссера.
  • GET /directors/{id} - получение режиссера по его идентификатору.
  • PUT /directors - редактирование режиссера.
  • DELETE /directors/{id} - удаление режиссера по его идентификатору.
Эндпойнты пути /genres:
  • GET /genres - получение коллекции всех жанров.
  • GET /genres/{id} - получение информации о жанре по его идентификатору.
Эндпойнты пути /mpa:
  • GET /mpa - получение коллекции всех рейтингов.
  • GET /mpa/{id} - получение информации о рейтинге по его идентификатору.
Эндпойнты пути /reviews:
  • POST /reviews - создание отзыва.
  • PUT /reviews - редактирование отзыва.
  • DELETE /reviews/{id} - удаление отзыва по его идентификатору.
  • GET /reviews/{id} - получение отзыва по его идентификатору.
  • GET /reviews?filmId={filmId}&count={count} - получение всех отзывов по идентификатору фильма, если фильм не указан, то все. Если количество не указано, то 10.
  • PUT /reviews/{id}/like/{userId} - пользователь ставит лайк фильму.
  • PUT /reviews/{id}/dislike/{userId} - пользователь ставит дизлайк фильму.
  • DELETE /reviews/{id}/like/{userId} - пользователь удаляет лайк фильму.
  • DELETE /reviews/{id}/dislike/{userId} - пользователь удаляет дизлайк фильму.

Схема базы данных

Диаграмма базы данных

Примечания:

  1. В таблице user_friends_status тип поля status_of_friendship - varchar с ограничениями на принимаемые значения (Confirmed или Unconfirmed).
  2. В этой же таблице user_id - id пользователя, инициировавшего добавление в друзья, friend_id - id пользователя, подтверждающего статус дружбы.

Пример запроса к базе, возвращающего логины пользователей, которые отправили запрос на добавление в друзья к пользователю с логином login3 и статус дружбы которых не подтвержден:

SELECT DISTINCT
       u.login
FROM users AS u
INNER JOIN user_friends_status AS ufs ON u.users_id = ufs.user_id
INNER JOIN users AS ua ON ua.users_id = ufs.friend_id
WHERE ufs.status_of_friendship = 'Unconfirmed' AND ua.login = 'login3';

About

Бэкенд социальной сети, позволяющей выбрать фильм или сериал для просмотра.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages