Filmorate — это социальная платформа для любителей кино, где пользователи могут делиться своими впечатлениями о фильмах, находить единомышленников и получать персонализированные рекомендации.
Filmorate представляет собой полнофункциональный бэкенд для социальной сети киноманов. Проект разработан для демонстрации навыков создания сложных Spring Boot приложений с богатой бизнес-логикой, системой рекомендаций и социальными функциями.
Основные цели проекта:
- Создание социальной платформы для обсуждения фильмов
- Реализация системы рекомендаций на основе пользовательских предпочтений
- Разработка механизма отзывов и оценок
- Внедрение ленты событий для отслеживания активности друзей
- Обеспечение высокой производительности с JDBC Template
- 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-разработки.