r73psv / java-filmorate

Movie service for selecting, commenting, liking, finding popular films, adding friends, and receiving movie recommendations based on friends' likes.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Filmorate

Данный проект - это сервис для кинотеки, который дает возможность пользователям выбирать, комментировать и оценивать любимые фильмы, а также искать наиболее популярные среди них. Кроме того, на сервисе можно добавлять друзей и получать рекомендации на основе их лайков.

Оглавление

База данных

Схема БД

Примеры запросов

Для фильмов:

  • Создание фильма:
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:

  • Получение рейтинга 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 или выше

Установка

  1. Склонируйте репозиторий на свой компьютер с помощью команды:
git clone https://github.com/BucketOnHead/java-filmorate.git
  1. Перейдите в директорию проекта:
cd java-filmorate
  1. Соберите проект с помощью Apache Maven:
mvn clean install

Запуск

После установки проекта, вы можете запустить его с помощью команды:

mvn spring-boot:run

Технологический стек

  • Java 11
  • Spring boot 2
  • JDBC, SQL, H2
  • Apache Maven

Footnotes

  1. 28 декабря 1895 года считается днём рождения кино.

About

Movie service for selecting, commenting, liking, finding popular films, adding friends, and receiving movie recommendations based on friends' likes.


Languages

Language:Java 100.0%