Skip to content

Repository files navigation

java-filmorate

Static BadgeStatic BadgeStatic BadgeStatic BadgeStatic BadgeStatic BadgeStatic BadgeStatic Badge

The Filmorate project — это бэкенд приложения для работы с базой данных фильмов. А также площадка для общения и взаимодействия пользователей.

preview

Основные возможности

  • Хранение данных о фильмах
  • Хранение данных о пользователях
  • Возможность пользователям ставить лайки фильмам
  • Возможность пользователям добавлять друг друга в друзья
  • Возможность получать рейтинг TOP_N фильмов по количеству лайков
  • Возможность получать общих с другим пользователем фильмов с сортировкой по их популярности
  • Возможность заводить друзей
  • Возможность оставлять отзывы о фильмах
  • Фильмы содержат возрастные ограничения по стандарту MPPA
  • Реализован поиск по названию и режиссерам
  • Реализована система жанров для фильмов
  • Есть лента событий

Требования (Environmental Requirements)

Для запуска проекта требуется: - Java версии 21
Приложение работает на порту 8080

Установка и запуск (Installation and Running)

Откройте терминал в корне проекта и выполните команды для запуска приложения.

Вариант 1 Spring
mvn spring-boot:run

  • для остановки CTRL+C

Вариант 2 Java
mvn package
cd ./target/
java -jar filmorate-0.0.1-SNAPSHOT.jar

  • для остановки CTRL+C

Вариант 3 Docker
mvn package
sudo docker build -t filmorate-image .
sudo docker run --name filmorate -p 8080:8080 filmorate-image

  • для остановки sudo docker stop filmorate

Работа с приложением (Working with the app)

Для работы с приложением используйте REST-клиент

  • Postman
  • Insomnia
  • RestFox
  • и подобные

Примеры пользовательских запросов (Request Examples)

ExamplesOfRequests

Схема базы данных (Database map)

DatabaseMap

Примеры запросов к базе данных:

  1. Get TOP-10 films:
SELECTf.film_name,
sum(l.user_id) AS rate
FROM films f
JOIN likes l ONf.id=l.film_idGROUP BYf.film_nameORDER BY rate DESCLIMIT10;
  1. Get all the movies liked by users 5, 6 and 7 with a duration of more than 100 minutes and with genres of adventure, horror, action.
SELECTf.film_name,
f.release_date,
f.durationFROM films f
WHEREf.idIN
(SELECTl.film_idFROM likes l
WHEREl.user_idIN
(SELECT friend_id
FROM friends fr
WHEREfr.user_idIN (5, 6, 7)
)
)
ANDf.duration>100ANDf.idIN
(SELECTfg.film_idFROM genres_of_films fg
WHEREfg.genre_idIN
(SELECTg.idFROM genres g
WHEREg.genre_nameIN('Боевик', 'Триллер', 'Комедия')
)
);

About

Template repository for Filmorate project.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages