Skip to content

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

Notifications You must be signed in to change notification settings

Just-Roman/java-filmorate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

"# Filmorate - Система рекомендаций фильмов

Описание проекта

Filmorate - это REST API приложение для управления фильмами и пользователями, построенное на Spring Boot. Система позволяет пользователям добавлять фильмы, ставить лайки, добавлять друзей и получать рекомендации на основе популярности фильмов.

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

  • Java 21
  • Spring Boot 3.2.4
  • Spring Data JPA
  • H2 Database (встроенная база данных)
  • Lombok (для уменьшения boilerplate кода)
  • Jakarta Validation (для валидации данных)
  • Maven (система сборки)
  • JUnit 5 (тестирование)

Архитектура проекта

Проект построен по принципам многослойной архитектуры:

src/main/java/ru/yandex/practicum/filmorate/
├── controller/          # REST контроллеры
├── service/            # Бизнес-логика
├── storage/            # Слой доступа к данным
│   ├── film/          # Репозитории для фильмов
│   ├── user/          # Репозитории для пользователей
│   ├── genre/         # Репозитории для жанров
│   └── mpa/           # Репозитории для рейтингов MPA
├── model/              # Модели данных
├── exception/          # Обработка исключений
└── mappers/           # Мапперы для преобразования данных

Основные сущности

Film (Фильм)

  • id - уникальный идентификатор
  • name - название фильма (обязательное, не пустое)
  • description - описание (максимум 200 символов)
  • releaseDate - дата выпуска (обязательное)
  • duration - продолжительность в минутах (положительное число)
  • likesCount - количество лайков
  • genres - список жанров
  • mpa - рейтинг MPA

User (Пользователь)

  • id - уникальный идентификатор
  • email - электронная почта (обязательное, валидный email)
  • login - логин (обязательное, не пустое)
  • name - имя пользователя
  • birthday - дата рождения (обязательное, в прошлом)
  • friends - список друзей

Genre (Жанр)

  • id - уникальный идентификатор
  • name - название жанра

MpaRating (Рейтинг MPA)

  • id - уникальный идентификатор
  • name - название рейтинга (G, PG, PG-13, R, NC-17)

API Endpoints

Фильмы

Метод Endpoint Описание
GET /films Получить все фильмы
GET /films/{id} Получить фильм по ID
GET /films/popular?count={count} Получить популярные фильмы
POST /films Создать новый фильм
PUT /films Обновить фильм
PUT /films/{filmId}/like/{userId} Поставить лайк фильму
DELETE /films/{filmId}/like/{userId} Убрать лайк с фильма

Пользователи

Метод Endpoint Описание
GET /users Получить всех пользователей
GET /users/{userId}/friends Получить друзей пользователя
GET /users/{userId}/friends/common/{friendsId} Получить общих друзей
POST /users Создать нового пользователя
PUT /users Обновить пользователя
PUT /users/{userId}/friends/{friendsId} Добавить в друзья
DELETE /users/{userId}/friends/{friendsId} Удалить из друзей

Жанры и рейтинги

Метод Endpoint Описание
GET /genres Получить все жанры
GET /genres/{id} Получить жанр по ID
GET /mpa Получить все рейтинги MPA
GET /mpa/{id} Получить рейтинг MPA по ID

База данных

Проект использует H2 встроенную базу данных со следующими таблицами:

  • film - фильмы
  • users - пользователи
  • genres - жанры
  • mpa - рейтинги MPA
  • film_genre - связь фильмов и жанров (многие ко многим)
  • film_like - лайки фильмов
  • friendship - дружба между пользователями

Конфигурация

Основные настройки находятся в src/main/resources/application.properties:

  • База данных: H2 файловая база
  • Логирование: DEBUG уровень для SQL запросов
  • Инициализация схемы: автоматическая при запуске

Особенности реализации

  1. Валидация данных: Используется Jakarta Validation для проверки входных данных
  2. Обработка ошибок: Централизованная обработка исключений через @RestControllerAdvice
  3. Два слоя storage: InMemory и Database реализации для гибкости
  4. Логирование: Подробное логирование HTTP запросов и SQL запросов
  5. Тестирование: Покрытие тестами основных сценариев использования

Контакты

  • Telegram - @sobolev_rs

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages