Filmorate project by The First Group - Sprint 13 by: Barinov Rodion, Galkin Anton, Korsakov Alexander, Lazarenko Oleg (team lead), Stepanov Dmitry.
Filmorate - это сервис, который позволяет пользователям оценивать фильмы и делиться своими оценками с другими пользователями.
- Java Amazon Corretto 21
- JDBC Template
- Row Mapper
- Maven
- Spring Boot
- H2
- Регистрация и аутентификация пользователей
- Добавление, редактирование и удаление фильмов
- Оценка фильмов пользователями
- Получение списка популярных фильмов
- Получение списка друзей пользователя
- Добавление и удаление друзей
- Получение списка общих друзей пользователей
- Получение списка рекомендаций фильмов для пользователя и др.
- Получение всех фильмов: SELECT * FROM films
- Получение всех пользователей: SELECT * FROM users
- Получение всех жанров: SELECT * FROM genres ORDER BY id
- Получение всех значений рейтинга: SELECT * FROM rating ORDER BY id
- Получение всех лайков: SELECT * FROM likes ORDER BY id
- Получение всех друзей: SELECT * FROM friends ORDER BY id
- Получение всех рейтингов: SELECT * FROM ratings ORDER BY id
- Получение всех жанров: SELECT * FROM genres ORDER BY id
- Получение всех фильмов с лайками: SELECT * FROM films_likes ORDER BY id
- Получение всех фильмов с жанрами: SELECT * FROM films_genres ORDER BY id
Контроллер для управления операциями с режиссерами.
Этот класс обрабатывает HTTP-запросы, связанные с сущностью "Режиссер". Он предоставляет методы для получения
информации о режиссерах, создания новых записей, обновления существующих и удаления режиссеров из базы данных.
Все операции делегируются сервису DirectorDbService.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/directors"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какDirectorDbService.
- HTTP Метод: GET
- Путь:
/directors - Описание: Получает список всех режиссеров.
- Возвращает: Коллекция объектов
Director, представляющих всех режиссеров.
- HTTP Метод: GET
- Путь:
/directors/{id} - Описание: Получает информацию о режиссере по его идентификатору.
- Параметры:
id: Идентификатор режиссера, который необходимо получить.
- Возвращает: Объект
Directorс указанным идентификатором. - Исключения:
NotFoundException: Если режиссер с указанным идентификатором не найден.
- HTTP Метод: POST
- Путь:
/directors - Описание: Создает нового режиссера.
- Параметры:
director: ОбъектDirector, содержащий информацию о новом режиссере.
- Возвращает: Созданный объект
Directorс присвоенным идентификатором. - Исключения:
ValidationException: Если данные режиссера не проходят валидацию.
- Статус ответа: 201 Created
- HTTP Метод: PUT
- Путь:
/directors - Описание: Обновляет информацию о существующем режиссере.
- Параметры:
director: ОбъектDirector, содержащий обновленную информацию о режиссере.
- Возвращает: Объект
Directorс обновленной информацией. - Исключения:
NotFoundException: Если режиссер с указанным идентификатором не найден.ValidationException: Если данные режиссера не проходят валидацию.
- HTTP Метод: DELETE
- Путь:
/directors/{id} - Описание: Удаляет режиссера по его идентификатору.
- Параметры:
id: Идентификатор режиссера, которого необходимо удалить.
- Исключения:
NotFoundException: Если режиссер с указанным идентификатором не найден.
DirectorDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Режиссер". Все операции, выполняемые контроллером, делегируются этому сервису.
Контроллер обрабатывает следующие исключения:
- NotFoundException: Выбрасывается, когда запрашиваемый ресурс (режиссер) не найден в базе данных.
- ValidationException: Выбрасывается, когда данные, переданные для создания или обновления режиссера, не проходят
- валидацию.
FilmController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с фильмами. Он предоставляет
точки для добавления, обновления и получения фильмов, а также для работы с лайками. Контроллер использует
FilmDbService для управления данными.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/films"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какFilmDbService.
- HTTP Метод: PUT
- Путь:
/films/{id}/like/{userId} - Описание: Добавляет лайк фильму с указанным
idот пользователя с указаннымuserId. - Параметры:
id: Идентификатор фильма.userId: Идентификатор пользователя.
- HTTP Метод: DELETE
- Путь:
/films/{id}/like/{userId} - Описание: Удаляет лайк фильму с указанным
idот пользователя с указаннымuserId. - Параметры:
id: Идентификатор фильма.userId: Идентификатор пользователя.
- HTTP Метод: POST
- Путь:
/films - Описание: Добавляет новый фильм в хранилище.
- Параметры:
film: ОбъектFilm, представляющий новый фильм.
- Возвращает: Объект
Film, представляющий добавленный фильм. - Статус ответа: 201 Created
- HTTP Метод: GET
- Путь:
/films/popular - Описание: Возвращает список из
countсамых популярных фильмов. - Параметры:
count: Количество популярных фильмов для возврата.genreId: Указывает жанр фильмов для возврата (необязательный).year: Указывает год фильмов для возврата (необязательный).
- Возвращает: Список из
countсамых популярных фильмов.
- HTTP Метод: GET
- Путь:
/films - Описание: Возвращает коллекцию всех фильмов в хранилище.
- Возвращает: Коллекция всех фильмов.
- HTTP Метод: PUT
- Путь:
/films - Описание: Обновляет информацию о фильме в хранилище.
- Параметры:
updatedFilm: ОбъектFilm, представляющий обновленную информацию о фильме.
- Возвращает: Объект
Film, представляющий обновленный фильм.
- HTTP Метод: GET
- Путь:
/films/{id} - Описание: Получает фильм с указанным
id. - Параметры:
id: Идентификатор фильма.
- Возвращает: Объект
Film, представляющий фильм.
- HTTP Метод: GET
- Путь:
/films/common - Описание: Возвращает список общих фильмов между двумя пользователями.
- Параметры:
userId: Идентификатор первого пользователя.friendId: Идентификатор второго пользователя.
- Возвращает: Список общих фильмов.
- HTTP Метод: GET
- Путь:
/films/director/{directorId} - Описание: Возвращает список фильмов одного режиссера, отсортированный по указанному параметру.
- Параметры:
directorId: Идентификатор режиссера.sortBy: Параметр сортировки (по умолчанию "year").
- Возвращает: Список фильмов одного режиссера, отсортированный по указанному параметру.
- HTTP Метод: DELETE
- Путь:
/films/{id} - Описание: Удаляет фильм с указанным
id. - Параметры:
id: Идентификатор фильма.
- HTTP Метод: GET
- Путь:
/films/search - Описание: Поиск фильмов по названию и режиссеру.
- Параметры:
query: Значение для поиска.by: Поиск выполнять по названию фильма, режиссера или вместе.
- Возвращает: Результат поиска, список фильмов, соответствующих критериям.
FilmDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Фильм". Все операции, выполняемые контроллером, делегируются этому сервису.
FilmController предоставляет полный набор операций для управления сущностью "Фильм" в приложении. Он обеспечивает
взаимодействие с клиентом через RESTful API, позволяя выполнять основные CRUD операции, а также операции с лайками и
поиском фильмов. Все бизнес-логика и взаимодействие с данными реализованы в сервисе FilmDbService, что способствует
разделению ответственности и улучшению тестируемости кода.
GenreController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с жанрами фильмов. Он
предоставляет API для получения информации о жанрах.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/genres"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какGenreDbStorage.
- HTTP Метод: GET
- Путь:
/genres - Описание: Получает список всех жанров.
- Возвращает: Коллекция объектов
Genre, представляющих все доступные жанры.
- HTTP Метод: GET
- Путь:
/genres/{id} - Описание: Получает жанр по его идентификатору.
- Параметры:
id: Идентификатор жанра, который необходимо получить.
- Возвращает: Объект
Genre, представляющий жанр с указанным идентификатором. - Исключения:
NotFoundException: Если жанр с указанным идентификатором не найден.
GenreDbStorage: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Жанр". Все операции, выполняемые контроллером, делегируются этому сервису.
GenreController предоставляет функциональность для работы с жанрами фильмов в приложении. Он обеспечивает
взаимодействие с клиентом через RESTful API, позволяя получать информацию о всех жанрах и конкретных жанрах по их
идентификаторам. Все бизнес-логика и взаимодействие с данными реализованы в сервисе GenreDbStorage, что способствует
разделению ответственности и улучшению тестируемости кода.
MpaController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с рейтингами фильмов (MPA). Он
предоставляет API для получения информации о рейтингах.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/mpa"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какMpaDbService.
- HTTP Метод: GET
- Путь:
/mpa - Описание: Получает список всех рейтингов фильмов.
- Возвращает: Коллекция объектов
Mpa, представляющих все доступные рейтинги.
- HTTP Метод: GET
- Путь:
/mpa/{id} - Описание: Получает рейтинг по его идентификатору.
- Параметры:
id: Идентификатор рейтинга, который необходимо получить.
- Возвращает: Объект
Mpa, представляющий рейтинг с указанным идентификатором. - Исключения:
NotFoundException: Если рейтинг с указанным идентификатором не найден.
MpaDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "MPA". Все операции, выполняемые контроллером, делегируются этому сервису.
MpaController предоставляет функциональность для работы с рейтингами фильмов в приложении. Он обеспечивает
взаимодействие с клиентом через RESTful API, позволяя получать информацию о всех рейтингах и конкретных рейтингах по
их идентификаторам. Все бизнес-логика и взаимодействие с данными реализованы в сервисе MpaDbService, что способствует
разделению ответственности и улучшению тестируемости кода.
ReviewController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с отзывами о фильмах. Он
предоставляет API для получения, добавления, обновления и удаления отзывов, а также для управления лайками и дизлайками.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/reviews"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какReviewService.
- HTTP Метод: GET
- Путь:
/reviews/{id} - Описание: Возвращает отзыв по его идентификатору.
- Параметры:
id: Идентификатор отзыва.
- Возвращает: Объект
Review, соответствующий переданному идентификатору.
- HTTP Метод: GET
- Путь:
/reviews - Описание: Возвращает список отзывов для определенного фильма. Если идентификатор фильма не указан, возвращаются все отзывы. Если указано количество отзывов, возвращается указанное количество самых полезных отзывов.
- Параметры:
filmId: Идентификатор фильма (необязательный).count: Количество отзывов, которые необходимо вернуть (необязательный).
- Возвращает: Список отзывов.
- HTTP Метод: POST
- Путь:
/reviews - Описание: Добавляет новый отзыв.
- Параметры:
review: ОбъектReview, содержащий данные нового отзыва.
- Возвращает: Объект
Review, содержащий данные добавленного отзыва.
- HTTP Метод: PUT
- Путь:
/reviews - Описание: Обновляет существующий отзыв.
- Параметры:
review: ОбъектReview, содержащий обновленные данные отзыва.
- Возвращает: Объект
Review, содержащий данные обновленного отзыва.
- HTTP Метод: DELETE
- Путь:
/reviews/{id} - Описание: Удаляет отзыв по его идентификатору.
- Параметры:
id: Идентификатор отзыва.
- HTTP Метод: PUT
- Путь:
/reviews/{id}/like/{userId} - Описание: Добавляет лайк к отзыву.
- Параметры:
reviewId: Идентификатор отзыва.userId: Идентификатор пользователя, который ставит лайк.
- HTTP Метод: PUT
- Путь:
/reviews/{id}/dislike/{userId} - Описание: Добавляет дизлайк к отзыву.
- Параметры:
reviewId: Идентификатор отзыва.userId: Идентификатор пользователя, который ставит дизлайк.
- HTTP Метод: DELETE
- Путь:
/reviews/{id}/like/{userId} - Описание: Удаляет лайк с отзыва.
- Параметры:
reviewId: Идентификатор отзыва.userId: Идентификатор пользователя, который удаляет лайк.
- HTTP Метод: DELETE
- Путь:
/reviews/{id}/dislike/{userId} - Описание: Удаляет дизлайк с отзыва.
- Параметры:
reviewId: Идентификатор отзыва.userId: Идентификатор пользователя, который удаляет свой дизлайк.
ReviewService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Отзыв". Все операции, выполняемые контроллером, делегируются этому сервису
ReviewController предоставляет полный набор операций для управления отзывами о фильмах в приложении. Он обеспечивает
взаимодействие с клиентом через RESTful API, позволяя выполнять основные CRUD операции, а также операции с лайками и
дизлайками. Все бизнес-логика и взаимодействие с данными реализованы в сервисе ReviewService, что способствует
разделению ответственности и улучшению тестируемости кода.
UserController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с пользователями. Он предоставляет
методы для получения списка всех пользователей, добавления и удаления друзей, получения списка друзей и общих друзей,
получения пользователя по идентификатору, создания и обновления пользователя.
@RestController: Указывает, что этот класс является контроллером REST.@RequestMapping("/users"): Задает базовый путь для всех методов контроллера.@RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких какUserDbService,FeedServiceиFilmDbService.
- HTTP Метод: GET
- Путь:
/users - Описание: Получает список всех пользователей.
- Возвращает: Коллекция всех пользователей.
- HTTP Метод: GET
- Путь:
/users/{id} - Описание: Получает пользователя с идентификатором
id. - Параметры:
id: Идентификатор пользователя.
- Возвращает: Пользователь с указанным идентификатором.
- Исключения:
NotFoundException: Если пользователь с указанным идентификатором не найден.
- HTTP Метод: POST
- Путь:
/users - Описание: Создает нового пользователя.
- Параметры:
user: Объект пользователя для создания.
- Возвращает: Созданный пользователь.
- Статус ответа: 201 Created
- HTTP Метод: PUT
- Путь:
/users - Описание: Обновляет существующего пользователя.
- Параметры:
updatedUser: Объект пользователя с обновленными данными.
- Возвращает: Обновленный пользователь.
- HTTP Метод: PUT
- Путь:
/users/{id}/friends/{friendId} - Описание: Добавляет пользователя с идентификатором
friendIdв список друзей пользователя с идентификаторомid. - Параметры:
id: Идентификатор пользователя.friendId: Идентификатор друга.
- HTTP Метод: DELETE
- Путь:
/users/{id}/friends/{friendId} - Описание: Удаляет пользователя с идентификатором
friendIdиз списка друзей пользователя с идентификаторомid. - Параметры:
id: Идентификатор пользователя.friendId: Идентификатор друга.
- HTTP Метод: GET
- Путь:
/users/{id}/friends - Описание: Получает список друзей пользователя с идентификатором
id. - Параметры:
id: Идентификатор пользователя.
- Возвращает: Список друзей пользователя.
- HTTP Метод: GET
- Путь:
/users/{id}/friends/common/{otherId} - Описание: Получает список общих друзей пользователей с идентификаторами
idиotherId. - Параметры:
id: Идентификатор первого пользователя.otherId: Идентификатор второго пользователя.
- Возвращает: Список общих друзей.
- HTTP Метод: GET
- Путь:
/users/{id}/recommendations - Описание: Получает рекомендации фильмов для пользователя с идентификатором
id. - Параметры:
id: Идентификатор пользователя.
- Возвращает: Список рекомендованных фильмов.
- HTTP Метод: GET
- Путь:
/users/{id}/feed - Описание: Получает список действий пользователя.
- Параметры:
id: Идентификатор пользователя.
- Возвращает: Список действий пользователя.
- HTTP Метод: DELETE
- Путь:
/users/{id} - Описание: Удаляет пользователя.
- Параметры:
id: Идентификатор пользователя.
UserDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Пользователь". Все операции, выполняемые контроллером, делегируются этому сервису.FeedService: Сервис, который управляет действиями пользователей и предоставляет информацию о действиях в виде ленты.FilmDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Фильм".
