Read this on English.
Представьте, что вы решили отдохнуть и провести вечер за просмотром фильма. Вкусная еда уже готовится, ваш любимый плед уютно свернулся в кресле — а вы все еще не выбрали, что посмотреть!
Фильмов много и с каждым годом их становится все больше. Чем их больше, тем больше разных оценок. Чем больше оценок, тем сложнее сделать выбор. Однако сейчас не время сдаваться!
Filmorate — сервис, который работает с фильмами и оценками пользователей, предлагает список наиболее популярных фильмов, рекомендованных к просмотру. Теперь ни вам, ни вашим друзьям не придется долго думать, что посмотреть вечером.
-
фильмы:
- модель данных: название, описание, дата релиза, продолжительность, рейтинг MPA, жанры, количество оценок пользователей;
- валидация данных: название не может быть пустым, максимальная длина описания — 200 символов, дата релиза — не раньше 28 декабря 1895 года, продолжительность фильма должна быть положительным числом;
- действия: добавление, обновление, хранение, получение и удаление;
- функционал: назначение и удаление "лайков" пользователями, получение пользователем списка наиболее популярных фильмов.
-
пользователи:
- модель данных: имя, логин, email, дата рождения;
- валидация данных: электронная почта не может быть пустой и должна содержать символ @, логин не может быть пустым и содержать пробелы, имя для отображения может быть пустым — в таком случае будет использован логин, дата рождения не может быть в будущем;
- действия: добавление, обновление, хранение, получение и удаление;
- функционал: добавление в друзья, удаление из друзей, получение полного списка друзей, получение списка общих друзей пользователей.
-
жанры:
- модель данных: наименование;
- валидация данных: название не может быть пустым;
- действия: получение информации о всех жанрах фильма, получение жанра по id.
-
рейтинг MPA:
- модель данных: наименование;
- валидация данных: название не может быть пустым;
- действия: получение информации о рейтинге фильма, получение рейтинга по id.
-
жанры фильмов:
- комедия;
- драма;
- мультфильм;
- триллер;
- документальный;
- боевик.
-
рейтинги фильмов:
G
— у фильма нет возрастных ограничений;PG
— детям рекомендуется смотреть фильм с родителями;PG-13
— детям до 13 лет просмотр не желателен;R
— лицам до 17 лет просматривать фильм можно только в присутствии взрослого;NC-17
— лицам до 18 лет просмотр запрещён.
- ошибки валидации данных - код ответа
400 Bad Request
; - ошибки валидации аргументов метода - код ответа
400 Bad Request
; - ошибки поиска объекта - код ответа
404 Not Found
; - внутренние ошибки сервера - код ответа
500 Internal Server Error
.
- фреймворк: Spring Boot 3.2.4:
- spring-boot-starter-web;
- spring-boot-starter-validation;
- spring-boot-starter-jdbc;
- spring-boot-starter-test.
- аннотирование классов приложения: Lombok
- логирование HTTP-запросов и ответов: Logbook 3.7.2
- хранение данных (рабочий режим): H2 Database
- хранение данных (режим тестирования): память приложения
- сборка и управление зависимостями: Apache Maven 3.9.9
- версия Java: 21
Получение списка всех фильмов
SELECT *
FROM films;
film_id | name | description | release_date | duration | mpa_rating_id |
---|---|---|---|---|---|
1 | Гладиатор | Римская империя. Бесстрашного и благородного генерала Максимуса боготворят солдаты, а старый император Марк Аврелий безгранично доверяет ему и относится как к сыну. | 2000-05-01 | 155 | 4 |
2 | Титаник |
В первом и последнем плавании шикарного «Титаника» встречаются двое. Пассажир нижней палубы Джек выиграл билет в карты, а богатая наследница Роза отправляется в Америку, чтобы выйти замуж по расчёту. | 1997-11-01 | 194 | 3 |
Получение списка всех пользователей
SELECT *
FROM users;
user_id | login | name | birthday | |
---|---|---|---|---|
1 | user1@ya.ru | user1 | Николай | 1990-02-12 |
2 | user2@ya.ru | user2 | Кирилл | 1993-11-01 |
3 | user3@ya.ru | user3 | Петр | 1997-03-08 |
Получение списка MPA рейтинга
SELECT *
FROM mpa_ratings;
mpa_rating_id | name |
---|---|
1 | G |
2 | PG |
3 | PG-13 |
4 | R |
5 | NC-17 |
Получение списка жанров
SELECT *
FROM genres;
name | genre_id |
---|---|
Комедия | 1 |
Драма | 2 |
Мультфильм | 3 |
Триллер | 4 |
Документальный | 5 |
Боевик | 6 |
Получение списка фильмов и их жанров
SELECT f.name,
g.name
FROM films f
LEFT JOIN film_genres fg ON f.film_id = fg.film_id
LEFT JOIN genres g ON fg.genre_id = g.genre_id;
name | name |
---|---|
Гладиатор | Драма |
Гладиатор | Боевик |
Титаник |
Драма |
Получение списка популярных фильмов по лайкам
SELECT f.name,
count(f.name) likes
FROM films f
LEFT JOIN likes l ON f.film_id = l.film_id
GROUP BY f.name
ORDER BY count(f.name) DESC;
name | likes |
---|---|
Гладиатор | 4 |
Титаник |
3 |
Получение всего списка друзей
SELECT *
FROM users
LEFT JOIN friendship f ON users.user_id = f.friend_id;
user_id | login | name | birthday | user_id | friend_id | friendship_status | |
---|---|---|---|---|---|---|---|
1 | user1@ya.ru | user1 | Николай | 1990-02-12 | 1 | 2 | true |
1 | user2@ya.ru | user2 | Кирилл | 1993-11-01 | 2 | 1 | true |
2 | user3@ya.ru | user3 | Петр | 1997-03-08 | 3 | 1 | true |
Получение списка друзей Николая
SELECT *
FROM users
WHERE user_id IN (SELECT f.friend_id
FROM users u
JOIN friendship f ON u.user_id = f.user_id
WHERE u.user_id = 1);
user_id | login | name | birthday | |
---|---|---|---|---|
2 | user2@ya.ru | user2 | Кирилл | 1993-11-01 |
3 | user3@ya.ru | user3 | Петр | 1997-03-08 |
Получение списка общих друзей Кирилла и Петра
SELECT *
FROM users
WHERE user_id IN
(SELECT friend_id
FROM users u
JOIN friendship f ON u.user_id = f.user_id
WHERE u.user_id = 2
AND f.is_confirmed = 'true')
AND user_id IN
(SELECT friend_id
FROM users u
JOIN friendship f ON u.user_id = f.user_id
WHERE u.user_id = 3
AND f.is_confirmed = 'true');
user_id | login | name | birthday | |
---|---|---|---|---|
1 | user1@ya.ru | user1 | Николай | 1990-02-12 |
- Java Development Kit (JDK) - версия 21 или более поздняя;
- Apache Maven - версия 3.9.9 или более поздняя.
Ниже приведены инструкции по установке JDK 21 на различных операционных системах.
Установка на macOS
Установите Homebrew запуском следующей команды в терминале (командной строке) операционной системы:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Установите JDK 21 с помощью Homebrew:
brew install openjdk@21
Создайте символическую ссылку, чтобы система могла найти JDK:
sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk
Добавьте JDK 21 в PATH. Откройте файл .zshrc (или .bash_profile, в зависимости от используемой оболочки) и добавьте следующую строку:
echo 'export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"' >> ~/.zshrc
Перезагрузите терминал или примените изменения с помощью команды:
source ~/.zshrc
Проверьте установленную версию Java:
java -version
Установка на Linux
Откройте терминал и выполните команду для обновления списка пакетов:
sudo apt update
Установите JDK 21:
sudo apt install openjdk-21-jdk
Убедитесь, что JDK установлен и настроен корректно:
java -version
Установка на Windows
-
Скачайте установочный файл JDK 21 с официального сайта Oracle или OpenJDK.
-
Запустите установочный файл и следуйте инструкциям установщика.
-
После установки настройте переменную среды JAVA_HOME:
- откройте
Системные настройки
>Переменные среды
; - в разделе
Системные переменные
нажмитеСоздать
и введите:- имя переменной:
JAVA_HOME
- значение переменной: путь к установленной JDK (например,
C:\Program Files\Java\jdk-21
).
- имя переменной:
- добавьте
JAVA_HOME\bin
в переменную Path.
- Проверьте версию Java в командной строке:
java -version
Ниже приведены инструкции по установке Maven на различных операционных системах.
Установка на macOS
Установите Homebrew, если он еще не установлен:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Установите Maven с помощью Homebrew:
brew install maven
Проверьте версию Maven, чтобы убедиться в правильной установке:
mvn -version
Установка на Linux
Откройте терминал и загрузите Apache Maven 3.9.9:
wget https://downloads.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
Распакуйте архив:
tar xzvf apache-maven-3.9.9-bin.tar.gz
Переместите распакованную папку в директорию /opt/:
sudo mv apache-maven-3.9.9 /opt/maven
Добавьте Maven в PATH. Откройте файл .bashrc или .zshrc и добавьте следующую строку:
export PATH=/opt/maven/bin:$PATH
Примените изменения:
source ~/.bashrc
Проверьте версию Maven:
mvn -version
Установка на Windows
-
Скачайте установочный архив Maven 3.9.9 с официального сайта.
-
Распакуйте архив в удобное место, например
C:\Program Files\Maven
. -
Настройте переменные среды:
- откройте
Системные настройки
>Переменные среды
. - в разделе
Системные переменные
нажмитеСоздать
и добавьте:- имя переменной:
MAVEN_HOME
- значение переменной: путь к папке Maven, например
C:\Program Files\Maven
.
- имя переменной:
- найдите переменную Path, выберите ее и нажмите
Изменить
. Добавьте новый путь:%MAVEN_HOME%\bin
.
- Перезапустите командную строку и проверьте версию Maven:
mvn -version
ВАЖНО! Запуск приложения осуществляется через системный порт 8080
. Перед запуском убедитесь, что порт 8080
свободен!
Ниже приведены инструкции по проверке порта на различных операционных системах.
Проверка порта на macOS
Откройте терминал.
Выполните следующую команду, заменив PORT
на номер порта, который нужно проверить:
lsof -i :PORT
Если порт занят, команда выведет список процессов, использующих порт. Для завершения процесса используйте команду:
kill -9 PID
где PID
— идентификатор процесса из вывода предыдущей команды.
Если порт свободен, команда не вернет никаких данных.
Проверка порта на Linux
Откройте терминал.
Выполните следующую команду, заменив PORT
на номер порта:
sudo lsof -i :PORT
Если порт занят, команда выведет список процессов, использующих порт. Для завершения процесса используйте команду:
sudo kill -9 PID
где PID
— идентификатор процесса из вывода предыдущей команды.
Если порт свободен, команда не вернет никаких данных.
Проверка порта на Windows
Откройте командную строку (cmd) или PowerShell с правами администратора.
Выполните следующую команду, заменив PORT
на номер порта:
netstat -aon | findstr :PORT
Если порт занят, команда выведет информацию о процессе, использующем порт. Обратите внимание на PID (идентификатор процесса).
Чтобы завершить процесс, откройте Диспетчер задач
, перейдите на вкладку Подробности
, найдите процесс с соответствующим PID и завершите его.
Если порт свободен, команда не вернет никаких данных.
- в терминале (командной строке) операционной системы;
- в программной среде разработки IntelliJ IDEA непосредственно в данном файле нажатием на символ тройной стрелки
>>>
, расположенной слева от строки описания соответствующей команды.
- Склонируйте репозиторий с использованием следующей команды:
git clone https://github.com/kirshumir01/java-filmorate.git
- Перейдите в корневую директорию склонированного проекта и выполните команду:
cd java-filmorate
- Запустите сборку проекта командой:
./mvnw clean install
- Запустите приложение, выполнив следующую команду:
./mvnw spring-boot:run
Доступ к публичному API будет открыт по ссылке через адресную строку интернет-браузера: http://localhost:8080
.
Read this on English.