Skip to content

Filmorate - социальная платформа для любителей кино. REST API на Java/Spring Boot с рекомендациями фильмов, системой отзывов, лентой событий и расширенными возможностями поиска.

Notifications You must be signed in to change notification settings

Evgeniy-Dmitriev/java-filmorate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Filmorate 🎬

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

📖 О проекте

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

Основные цели проекта:

  • Создание социальной платформы для обсуждения фильмов
  • Реализация системы рекомендаций на основе пользовательских предпочтений
  • Разработка механизма отзывов и оценок
  • Внедрение ленты событий для отслеживания активности друзей
  • Обеспечение высокой производительности с JDBC Template

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

Backend

  • Java 21 - основной язык разработки
  • Spring Boot 3.4.3 - фреймворк
  • Spring Web - REST API
  • Spring Validation - валидация данных
  • JDBC Template - работа с базой данных
  • Lombok - упрощение кода

База данных

  • H2 Database - in-memory реляционная БД
  • SQL - миграции и схемы

Дополнительные технологии

  • Logbook - логирование HTTP запросов
  • Maven - система сборки

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

🎥 Управление фильмами

  • ✅ Добавление и редактирование информации о фильмах
  • ✅ Система рейтингов MPA (G, PG, PG-13, R, NC-17)
  • ✅ Жанры фильмов (Комедия, Драма, Мультфильм и др.)
  • ✅ Поиск фильмов по названию и режиссеру
  • ✅ Топ популярных фильмов с фильтрацией по жанру и году

👥 Социальные функции

  • ✅ Регистрация и управление пользователями
  • ✅ Система друзей (добавление/удаление)
  • ✅ Лента событий (лайки, дружба, отзывы)
  • ✅ Общие друзья и общие фильмы

💬 Отзывы и оценки

  • ✅ Написание отзывов на фильмы
  • ✅ Лайки и дизлайки отзывов
  • ✅ Рейтинг полезности отзывов
  • ✅ Модерация контента

🎯 Рекомендации

  • ✅ Персонализированные рекомендации фильмов
  • ✅ Поиск похожих пользователей
  • ✅ Система на основе коллаборативной фильтрации

🎬 Режиссеры

  • ✅ Управление информацией о режиссерах
  • ✅ Фильмы по режиссерам с сортировкой
  • ✅ Связь фильмов с режиссерами

🗄 Структура базы данных

📁 filmorate/
├── 📊 users           # Пользователи системы
├── 📊 films           # Фильмы
├── 📊 ratings         # Рейтинги MPA
├── 📊 genres          # Жанры фильмов
├── 📊 directors       # Режиссеры
├── 📊 friends         # Система друзей
├── 📊 likes           # Лайки фильмов
├── 📊 reviews         # Отзывы на фильмы
├── 📊 reviews_likes   # Лайки отзывов
├── 📊 feed            # Лента событий
└── 📊 film_directors  # Связь фильмов и режиссеров

🚀 Запуск приложения Предварительные требования Java 21 или выше

Maven 3.6+

Запуск приложения bash

Клонирование репозитория

git clone cd filmorate

Сборка и запуск

mvn spring-boot:run Доступ к приложению Приложение: http://localhost:8080

H2 Console: http://localhost:8080/h2-console

JDBC URL: jdbc:h2:file:./db/filmorate

User: sa

Password: password

Запуск тестов bash mvn test 📚 API Документация Основные endpoint'ы: Фильмы GET /films - получить все фильмы

POST /films - добавить фильм

PUT /films - обновить фильм

GET /films/{id} - получить фильм по ID

PUT /films/{id}/like/{userId} - поставить лайк

GET /films/popular - популярные фильмы

GET /films/search - поиск фильмов

Пользователи GET /users - получить всех пользователей

POST /users - добавить пользователя

PUT /users - обновить пользователя

GET /users/{id} - получить пользователя по ID

PUT /users/{id}/friends/{friendId} - добавить друга

GET /users/{id}/recommendations - рекомендации фильмов

Отзывы GET /reviews - получить все отзывы

POST /reviews - добавить отзыв

PUT /reviews - обновить отзыв

PUT /reviews/{reviewId}/like/{userId} - лайк отзыва

Режиссеры GET /directors - все режиссеры

POST /directors - добавить режиссера

GET /directors/{id} - режиссер по ID

Жанры и рейтинги GET /genres - все жанры

GET /mpa - все рейтинги MPA

🔧 Примеры запросов Добавление фильма: json POST /films { "name": "The Matrix", "description": "Компьютерный хакер узнает от таинственных повстанцев о настоящей природе своей реальности", "releaseDate": "1999-03-31", "duration": 136, "mpa": {"id": 4}, "genres": [{"id": 6}] } Добавление пользователя: json POST /users { "email": "user@example.com", "login": "film_lover", "name": "Киноман", "birthday": "1990-01-01" } 🧪 Тестирование Проект включает комплексное тестирование:

Unit tests - тестирование сервисов

Integration tests - тестирование API endpoints

SQL миграции - тестовые данные в H2

Запуск тестов:

bash mvn test 📈 Планы по доработке Краткосрочные улучшения: Миграция на PostgreSQL - переход на production-ready БД

Кэширование - добавление Redis для повышения производительности

Пагинация - для списков фильмов и пользователей

Среднесрочные улучшения: Аутентификация - JWT-based аутентификация

Cloud хранилище - для изображений и постеров фильмов

WebSocket - real-time уведомления

Долгосрочные улучшения: Микросервисная архитектура - разделение на сервисы

ML рекомендации - улучшение системы рекомендаций

Мобильное приложение - React Native клиент

👥 Разработчики Проект разработан Евгением Дмитриевым как учебный проект в рамках курса Java-разработки.

About

Filmorate - социальная платформа для любителей кино. REST API на Java/Spring Boot с рекомендациями фильмов, системой отзывов, лентой событий и расширенными возможностями поиска.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages