Приложение разработано в рамках прохождения учебного курса Java-разработчик от Яндекс.Практикум
Представьте, что после тяжёлого дня вы решили отдохнуть и провести вечер за просмотром фильма. Вкусная еда уже готовится, любимый плед уютно свернулся на кресле — а вы всё ещё не выбрали, что же посмотреть! Фильмов много — и с каждым годом становится всё больше. Чем их больше, тем больше разных оценок. Чем больше оценок, тем сложнее сделать выбор. Однако не время сдаваться! Это приложение - бэкенд для сервиса, который работает с фильмами и оценками пользователей, а также возвращает топ-10 фильмов, рекомендованных к просмотру. Теперь ни вам, ни вашим друзьям не придётся долго размышлять, что посмотреть вечером.
Приложение представляет собой "монолит". Его основой являются классы, описывающие основные объекты взаимодействия:
- пользователи
- фильмы
- жанры
- рейтинги возрастных ограничений
- режиссёры
- отзывы
- лента событий,
а также классы для работы с ними.
Приложение при работе с:
- пользователями позволяет:
- добавлять пользователей (данные о новом пользователе передаются в теле запроса на эндпоинт
POST /users
) - обновлять пользователей (данные для обновления пользователя передаются в теле запроса на эндпоинт
PUT /users
) - удалять пользователей (идентификатор пользователя передаётся в переменную
пути
DELETE /users/{id}
) - просматривать информацию о конкретном пользователе по идентификатору (идентификатор
пользователя передаётся в переменную пути
GET /users/{id}
) - просматривать список всех пользователей (
GET /users
) - добавлять пользователя в друзья (идентификаторы пользователей передаются в переменные пути
PUT /users/{id}/friends/{friendId}
) - удалять пользователя из друзей (идентификаторы пользователей передаются в переменные пути
DELETE /users/{id}/friends/{friendId}
) - просматривать друзей другого пользователя (идентификатор пользователя передаётся в переменную
пути
GET /users/{id}/friends
) - просматривать общих друзей с другим пользователем (идентификаторы пользователей передаются в
переменные пути
GET /users/{id}/friends/common/{otherId}
)
- добавлять пользователей (данные о новом пользователе передаются в теле запроса на эндпоинт
- фильмами позволяет:
- добавлять фильмы (данные о новом фильме передаются в теле запроса на эндпоинт
POST /films
) - обновлять фильмы (данные для обновления пользователя передаются в теле запроса на эндпоинт
PUT films/
) - удалять фильмы (идентификатор фильма передаётся в переменную пути
DELETE /films/{id}
) - просматривать информацию о конкретном фильме по идентификатору (идентификатор фильма
передаётся в переменную пути
GET /films/{id}
) - просматривать список всех фильмов (
GET /films
) - добавлять лайки к фильмам (идентификаторы фильма и пользователя, поставившего лайк, передаются
в переменные пути на эндпоинт
PUT /films/{id}/like/{userId}
) - удалять лайки к фильмам (идентификаторы фильма и пользователя, поставившего лайк, передаются
в переменные пути на эндпоинт
DELETE /films/{id}/like/{userId}
) - просматривать самые популярные фильмы (на основе лайков) (
GET /films/popular
, также реализована пагинация и можно передать параметрами запроса номер и размер страницы?page=&count=
) - просматривать все фильмы определенного режиссера (идентификатор режиссёра передаётся в
переменную пути
GET /films/directors/{directorId}
, также можно добавить параметр запроса?year=
для сортировки по году выхода фильма и реализована пагинация, позволяющая передать номер и размер страницы?page=&count=
) - просматривать общие с другим пользователем фильмы (идентификаторы пользователей передаются в
параметры запроса
GET /films/common?userId=&friendId=
, также реализована пагинация и можно передать параметрами запроса номер и размер страницы?page=&count=
) - просматривать рекомендации фильмов (идентификатор пользователя передаётся в переменную пути
GET /users/{id}/recommendations
, также реализована пагинация и можно передать параметрами запроса номер страницы и размер страницы?page=&size=
) - искать фильмы по названию или режиссёру (в параметры запроса передаются название фильма и имя
режиссёра
GET /films/search?query=&by=
)
- добавлять фильмы (данные о новом фильме передаются в теле запроса на эндпоинт
- режиссёрами позволяет:
- добавлять режиссёров (данные о новом режиссёре передаются в теле запроса на эндпоинт
POST /directors
) - обновлять режиссёров (данные для обновления режиссёра передаются в теле запроса на эндпоинт
PUT /directors
) - удалять режиссёров (идентификатор режиссёра передаётся в переменную пути
DELETE /directors/{id}
) - просматривать данные о конкретном режиссёре по идентификатору (идентификатор режиссёра
передаётся в переменную пути
GET /directors/{id}
) - просматривать список всех режиссёров (
GET /directors
)
- добавлять режиссёров (данные о новом режиссёре передаются в теле запроса на эндпоинт
- отзывами о фильмах позволяет:
- добавлять отзывы о фильмах (данные о новом отзыве передаются в теле запроса на эндпоинт
POST /reviews
) - обновлять отзывы о фильмах (данные для обновления отзыве передаются в теле запроса на эндпоинт
PUT /reviews
) - удалять отзывы о фильмах (идентификатор отзыва передаётся в переменную пути
DELETE /reviews/{id}
) - добавлять лайки к отзывам о фильмах (идентификаторы отзыва и пользователя, поставившего лайк,
передаются в переменные пути на эндпоинт
PUT /reviews/{id}/like/{userId}
) - удалять лайки к отзывам о фильмах (идентификаторы отзыва и пользователя, удалившего лайк,
передаются в переменные пути на эндпоинт
DELETE /reviews/{id}/like/{userId}
) - добавлять дизлайки к отзывам о фильмах (идентификаторы отзыва и пользователя, поставившего
дизлайк, передаются в переменные пути на эндпоинт
PUT /reviews/{id}/dislike/{userId}
) - удалять дизлайки к отзывам о фильмах (идентификаторы отзыва и пользователя, удалившего дизлайк,
передаются в переменные пути на эндпоинт
DELETE /reviews/{id}/dislike/{userId}
) - просматривать информацию о конкретном отзыве по идентификатору (идентификатор отзыва
передаётся в переменную пути на эндпоинт
GET /reviews/{id}
) - просматривать все отзывы о конкретном фильме (идентификатор фильма передаётся параметром
запроса на эндпоинт
GET /reviews/?filmId=
, дополнительно параметром запроса?count=
можно указать количество фильмов на странице)
- добавлять отзывы о фильмах (данные о новом отзыве передаются в теле запроса на эндпоинт
- лентой событий позволяет:
- просматривать ленту событий другого пользователя (идентификатор пользователя передаётся в
переменную пути на эндпоинт
GET /users/{id}/feed
)
- просматривать ленту событий другого пользователя (идентификатор пользователя передаётся в
переменную пути на эндпоинт
- жанрами фильмов позволяет:
- просматривать список всех жанров фильмов (
GET /genres
) - просматривать информацию о конкретном жанре фильмов по идентификатору (идентификатор жанра
передаётся в переменную пути на эндпоинт
GET /genres/{id}
)
- просматривать список всех жанров фильмов (
- рейтингом возрастных ограничений фильмов позволяет:
- просматривать список всех рейтингов возрастных ограничений фильмов (
GET /mpa
) - просматривать информацию о конкретном рейтинге возрастных ограничений фильмов по идентификатору
(идентификатор рейтинга возрастных ограничений передаётся в переменную пути на эндпоинт
GET /mpa/{id}
)
- просматривать список всех рейтингов возрастных ограничений фильмов (
- Windows 10 - операционная
система
- Java 11 - язык программирования
- IntelliJ IDEA
2022.1.4 (Ultimate Edition) - среда разработки
- Spring Boot 2.6.6 - используемый фреймворк
- Apache Maven 4.0.0 - управление зависимостями
- Project Lombok 1.18.24 - библиотека аннотаций для сокращения
шаблонного кода
- JDBC -
компонент Spring JdbcTemplate
- H2 - база данных
- Postman 9.31.0 - приложение для выполнения запросов
к API.
- JUnit 4.13.2 - фреймворк для модульного тестирования программного
обеспечения на языке Java
На Вашем компьютере должны быть установлены соответствующие приложения из раздела "Стек
технологий".
Для запуска приложения необходимо:
- склонировать проект на свой компьютер
- открыть склонированный проект в IntelliJ IDEA
- запустить выполнение главного метода программы
Main
классаFilmorateApplication
, нажав на зелёный треугольник в верхней панели,
либо слева от названия главного класса
После компиляции и запуска приложения им можно пользоваться.
Для этого можно использовать браузер или программу для работы с API, например, Postman.
В адресной строке написатьhttps://localhost:8080/
и далее необходимый эндпоинт для подходящего действия из раздела Функционал.
Написаны модульные тесты и есть тестирование с помощью коллекции тестов и приложения
Postman, способного выполнять запросы к API.
Чтобы выполнить модульные тесты достаточно открыть склонированный проект
в IntelliJ IDEA
, перейти в директорию тестов Filmorate/src/test/java/ru.yandex.practicum.filmorate
и выбрать из
предложенных интересующий класс для проверки (красная стрелка).
Внутри класса можно запустить выполнение определенного теста, нажав на зелёный треугольник слева
от названия теста (красный кружок) или же запустить все тесты, которые есть в данном
классе (жёлтый кружок).
Для запуска коллекции тестов необходимо предварительно выполнить все инструкции из раздела
"Запуск приложения", далее запустить приложение
Postman, импортировать
коллекцию тестов, нажать на вкладку "Run collection".
Готово. Тесты пройдут автоматически.
Связаться с автором проекта можно в telegram (@gorden73).