Данный проект - это сервис для кинотеки, который дает возможность пользователям выбирать, комментировать и оценивать любимые фильмы, а также искать наиболее популярные среди них. Кроме того, на сервисе можно добавлять друзей и получать рекомендации на основе их лайков.
Создание
фильма:
INSERT INTO films (name,
description,
release_date,
duration_in_minutes,
mpa_rating_id)
VALUES (?, ?, ?, ?, ?);
Обновление
фильма:
UPDATE
films
SET name = ?,
description = ?,
release_date = ?,
duration_in_minutes = ?,
mpa_rating_id = ?
WHERE film_id = ?;
Получение
фильмапо идентификатору
:
SELECT f.film_id,
f.name,
f.description,
f.release_date,
f.duration_in_minutes,
mp.name AS mpa_rating,
g.name AS genre
FROM films f
JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id
JOIN film_genres fg ON f.film_id = fg.film_id
JOIN genres g ON fg.genre_id = g.genre_id
WHERE f.film_id = ?;
Получение всех
фильмов:
SELECT f.film_id,
f.name,
f.description,
f.release_date,
f.duration_in_minutes,
mp.name AS mpa_rating,
GROUP_CONCAT(g.name) AS genres
FROM films f
JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id
JOIN film_genres fg ON f.film_id = fg.film_id
JOIN genres g ON fg.genre_id = g.genre_id
GROUP BY f.film_id;
Получение топ-N (по количеству лайков)
фильмов:
SELECT f.film_id,
f.name,
f.description,
f.release_date,
f.duration_in_minutes,
mp.name AS mpa_rating,
g.name AS genre,
COUNT(fl.user_id) AS like_count
FROM films f
JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id
JOIN film_genres fg ON f.film_id = fg.film_id
JOIN genres g ON fg.genre_id = g.genre_id
LEFT JOIN film_likes fl ON f.film_id = fl.film_id
GROUP BY f.film_id,
mp.name,
g.name
ORDER BY like_count DESC LIMIT ?;
Создание
пользователя:
INSERT INTO users (email,
login,
name,
birthday)
VALUES (?, ?, ?, ?)
Обновление
пользователя:
UPDATE
users
SET email = ?,
login = ?,
name = ?,
birthday = ?
WHERE user_id = ?
Получение
пользователяпо идентификатору
:
SELECT *
FROM users
WHERE user_id = ?
Получение всех
пользователей:
SELECT *
FROM users
Получение
жанрапо идентификатору
:
SELECT *
FROM genres
WHERE genre_id = ?
Получение всех
жанров:
SELECT *
FROM genres
Получение
рейтинга MPAпо идентификатору
:
SELECT *
FROM mpa_ratings
WHERE mpa_rating_id = ?
Получение всех
рейтингов MPA:
SELECT *
FROM mpa_ratings
Входные данные, поступающие в запросе, должны соответствовать определенным критериям:
- Название фильма должно быть указано и не может быть пустым
- Максимальная длина описания фильма не должна превышать 200 символов
- Дата релиза фильма должна быть не раньше 28 декабря 1895 года1
- Продолжительность фильма должна быть положительной
- Рейтинг фильма должен быть указан
- Электронная почта пользователя должна быть указана и соответствовать формату email
- Логин пользователя должен быть указан и не содержать пробелов
- Дата рождения пользователя должна быть указана и не может быть в будущем
- Apache Maven 3.6.0 или выше
- Git
- JDK 11 или выше
- Склонируйте репозиторий на свой компьютер с помощью команды:
git clone https://github.com/BucketOnHead/java-filmorate.git
- Перейдите в директорию проекта:
cd java-filmorate
- Соберите проект с помощью Apache Maven:
mvn clean install
После установки проекта, вы можете запустить его с помощью команды:
mvn spring-boot:run
- Java 11
- Spring boot 2
- JDBC, SQL, H2
- Apache Maven
Footnotes
-
28 декабря 1895 года считается днём рождения кино. ↩