Skip to content

Latest commit

 

History

History
114 lines (71 loc) · 7.33 KB

README.md

File metadata and controls

114 lines (71 loc) · 7.33 KB

Описание проекта Кинорейтинг (Filmorate): Индивидуальная и командная разработка

Краткое описание функционала программы

Сервис поиска и оценки фильмов (Spring Boot, JDBC+API, H2 Database; групповая разработка). Приложение включает в себя возможности ведения каталога фильмов, поиска по нему, проставления оценки и лайков, обмена мнением по фильмам, получения автоматических рекомендаций топ-фильмов к просмотру, пользователи могут добавлять друг друга в друзья.

В ходе реализации проекта были выполнены следующие задачи:

1. Добавление режиссёров в фильмы (ветка для реализации add-director)

В информацию о фильмах мы добавили имя режиссёра. После этого появилась следующая функциональность:

  1. Вывод всех фильмов режиссёра, отсортированных по количеству лайков.
  2. Вывод всех фильмов режиссёра, отсортированных по годам.

2. Функциональность «Общие фильмы» (add-common-films)

Мы реализовали вывод общих с другом фильмов с сортировкой по их популярности.

3. Функциональность «Лента событий» (add-feed)

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

4. Функциональность «Рекомендации» (add-recommendations)

Реализовали простую рекомендательную систему для фильмов. Примерный алгоритм выглядит следующим образом:

  1. Найти пользователей с максимальным количеством пересечения по лайкам.
  2. Определить фильмы, которые один пролайкал, а другой нет.
  3. Рекомендовать фильмы, которым поставил лайк пользователь с похожими вкусами, а тот, для кого составляется рекомендация, ещё не поставил.

5. Вывод самых популярных фильмов по жанру и годам (add-most-populars)

Добавили возможность выводить топ-N фильмов по количеству лайков. Фильтрацию сделали по двум параметрам:

  1. По жанру.
  2. За указанный год.

6. Функциональность «Поиск» (add-search)

Реализовали поиск по названию фильмов и по режиссёру.

Алгоритм умеет искать по подстроке. Например, вводим «крад», а в поиске возвращаются следующие фильмы: «Крадущийся тигр, затаившийся дракон», «Крадущийся в ночи» и другие.

7. Функциональность «Отзывы» (add-reviews)

В приложении появились отзывы на фильмы. Добавленные отзывы имеют рейтинг и несколько дополнительных характеристик.

Характеристики отзыва.

  1. Оценка — полезно / бесполезно.
  2. Тип отзыва — негативный / положительный.

Рейтинг отзыва.

У отзыва имеется рейтинг. При создании отзыва рейтинг равен нулю. Если пользователь оценил отзыв как полезный, это увеличивает его рейтинг на 1. Если как бесполезный, то уменьшает на 1.

Отзывы сортируются по рейтингу полезности.

8. Удаление фильмов и пользователей (add-remove-endpoint)

В приложение добавили функциональность для удаления фильма и пользователя по идентификатору.

Диаграмма базы данных

Alt text

🧩 Стек-технологий и опыт разработки 🧩

В ходе реализации проекта мной были изучен и применен на практике следующий стек технологий:

  • Система сборки Maven, устройство и назначение pom.xml файла

  • Архитектура REST

  • Фреймворк логирования Logback (slf4j)

  • Библиотека Lombok

  • Spring Boot Framework (преимущественно для построения Web API)

    • spring-boot-maven-plugin
    • spring-boot-starter-test
    • spring-boot-starter-web
    • spring-boot-starter-logging
    • spring-boot-starter-validation
    • application.properties
  • Инструмент тестирования Postman

  • Паттерн проектирования Builder

  • Механизм pull-request в GitHub

  • Библиотека Apache Commons Lang (StringUtils)

  • Принцип проектирования ООП "Внедрение зависимостей" (Inversion of Control)

  • Spring Framework

    • Spring IoC-контейнер, Application Context, Spring Beans, Dependency Injection
    • централизованный обработчик исключений
  • REST API (HTTP: переменная пути, параметры запроса, объекты на эндпоинте, метаданные сообщения)

  • Архитектура приложения (разделение на слои)

  • Библиотека Jackson (ObjectMapper)


Системные требования

В данном репозитории представлен бэкенд приложения. Работоспособность приложения протестирована по WEB API с помощью Postman-тестов, тесты расположены в папке postman.

Приложение работает корректно в текущем виде при наличии: