Это серверная программа на Java для оценки и поиска фильмов.
- Создание и редактирование фильмов.
- Создание и редактирование учетных записей пользователей.
- Добавление пользователями в друзья других пользователей.
- Добавление пользователями лайков фильмам.
- Просмотр фильмов с наибольшим количеством лайков.
- Добавление отзывов к фильмам.
- Просмотр ленты событий пользователя.
- Просмотр списка фильмов определённого режиссёра.
- Поиск фильмов по названию или по режиссёру.
- Поиск общих с другим пользователем понравившихся фильмов.
- Предоставление рекомендаций, на основе понравившихся пользователю фильмов.
- Удаление фильмов.
- Удаление пользователей.
- Программа предоставляет API для интеграции с другими приложениями.
Примеры запросов:
-
Создание пользователя
- Эндпоинт:
POST/users - Тело запроса:
{ "login": "yourLogin", "name": "your name", "email": "[email protected]", "birthday": "2000-01-01' }- Тело ответа:
{ "id": 1, "email": "[email protected]", "login": "yourLogin", "name": "your name", "birthday": "2000-08-20", "friends": [] } - Эндпоинт:
-
Добавление фильма
- Эндпоинт:
POST /films - Тело запроса:
{ "name": "new film", "description": "adipisicing", "releaseDate": "1967-03-25", "duration": 100 } - Ответ:
{ "id": 1, "name": "new film", "description": "adipisicing", "releaseDate": "1967-03-25", "duration": 100, "likes": [] }
- Эндпоинт:
-
Добавление в друзья
- Эндпоинт:
PUT /users/{id}/friends/{friendId}
- Эндпоинт:
-
Поставить лайк
- Эндпоинт:
PUT /films/{id}/like/{userId}
- Эндпоинт:
ER-диаграмма иллюстрирует сущности и их связи в программе.
-
films: Представляет объект фильма. Атрибуты:
film_id: уникальный идентификатор каждого фильмаname: названиеdescription: описаниеrelease_date: год выходаduration: длительностьrating_id: идентификатор соответствующего рейтинга
-
rating: Представляет объект рейтинга. Атрибуты:
id: уникальный идентификатор каждого рейтингаname: названиеdescription: подробное описание
-
film_genre: Представляет соответствие фильма и жанров. Атрибуты:
film_id: идентификатор фильмаgenre_id: идентификатор соответствующего жанра
-
genres: Представляет объект жанра. Атрибуты:
genre_id: уникальный идентификатор каждого жанраname: название
-
users: Представляет объект пользователя. Атрибуты:
user_id: уникальный идентификатор каждого пользователяemail: адрес электронной почтыlogin: логинname: имяbirthday: дата рождения
-
friends: Представляет дружеские связи между пользователями. Атрибуты:
user_id: идентификатор пользователяfriend_id: идентификатор другаfriends_status: статус дружбы
-
likes: Представляет связь пользователей и понравившихся им фильмов. Атрибуты:
film_id: идентификатор фильмаuser_id: идентификатор пользователя
-
events: Предоставляет объект события в ленте активности пользователя. Атрибуты:
event_id: идентификатор событияtimestamp: время событияuser_id: идентификатор пользователяevent_type: тип событияoperation: произведённое действиеentity_id: идентификатор объекта, связанного с событием
-
directors: Предоставляет объект режиссёра. Атрибуты
director_id: идентификатор режиссёраname: имя
-
film-director: Предоставляет связь фильма и его режиссёров.
director_id: идентификатор режиссёраfilm_id: идентификатор фильма
-
reviews:Предоставляет объект отзыва. Атрибуты
id: идентификатор отзываcontent: содержание отзываis_positive: тип отзыва: негативный/положительныйuser_id: идентификатор пользователяfilm_id: идентификатор фильмаuseful: количество оценок полезности отзыва
-
reviews-likes:Предоставляет связь отзыва и оценок пользователей. Атрибуты
review_id: идентификатор отзываuser_id: идентификатор пользователяìs_like: оценка отзыва пользователем
Примеры запросов SQL:
-
Выгрузить все фильмы
SELECT * FROM films; -
Выгрузить всех пользователей
SELECT * FROM users; -
Выгрузить фильм по ID
SELECT * FROM films WHERE id = <film_id>; -
Выгрузить пользователя по ID
SELECT * FROM users WHERE id = <user_id>; -
Выгрузить имена пользователей, поставивших лайк определенному фильму
SELECT users.name FROM users JOIN likes ON users.id = likes.user_id WHERE likes.film_id = 5; -
Выгрузить названия пяти самых популярных фильмов и количество лайков
SELECT f.name AS film_name, COUNT(l.film_id) AS like_count FROM films AS f JOIN likes AS l ON f.id = l.film_id GROUP BY f.id ORDER BY like_count DESC LIMIT 5; -
Выгрузить ID общих друзей
SELECT user2_id FROM friends WHERE friends_status IN ('CONFIRMED') AND user_id = N INTERSECT SELECT user2_id FROM friends WHERE friends_status IN ('CONFIRMED') AND user_id = N2