https://github.com/ivanmartynovleti/java-filmorate
Бэкенд социальной сети, позволяющей выбрать фильм или сериал для просмотра.
https://github.com/ivanmartynovleti/java-filmorate
h2-database java jdbctemplate junit lombok maven rest-api slf4j spring-boot spring-framework sql
Last synced: 6 days ago
JSON representation
Бэкенд социальной сети, позволяющей выбрать фильм или сериал для просмотра.
- Host: GitHub
- URL: https://github.com/ivanmartynovleti/java-filmorate
- Owner: IvanMartynovLETI
- Created: 2023-04-16T18:47:42.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-07-25T19:59:20.000Z (about 2 years ago)
- Last Synced: 2025-10-03T15:59:11.094Z (6 days ago)
- Topics: h2-database, java, jdbctemplate, junit, lombok, maven, rest-api, slf4j, spring-boot, spring-framework, sql
- Language: Java
- Homepage:
- Size: 438 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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';