Skip to content

lazarx77/java-filmorate

Repository files navigation

java-filmorate

Filmorate project by The First Group - Sprint 13 by: Barinov Rodion, Galkin Anton, Korsakov Alexander, Lazarenko Oleg (team lead), Stepanov Dmitry.

Database project.

Filmorate

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

Взаимодействие с функциями приложения осуществляется через REST API.

DirectorController

Контроллер для управления операциями с режиссерами.

Этот класс обрабатывает HTTP-запросы, связанные с сущностью "Режиссер". Он предоставляет методы для получения информации о режиссерах, создания новых записей, обновления существующих и удаления режиссеров из базы данных. Все операции делегируются сервису DirectorDbService.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/directors"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как DirectorDbService.

Методы

getAll()

  • HTTP Метод: GET
  • Путь: /directors
  • Описание: Получает список всех режиссеров.
  • Возвращает: Коллекция объектов Director, представляющих всех режиссеров.

getDirectorById(long id)

  • HTTP Метод: GET
  • Путь: /directors/{id}
  • Описание: Получает информацию о режиссере по его идентификатору.
  • Параметры:
    • id: Идентификатор режиссера, который необходимо получить.
  • Возвращает: Объект Director с указанным идентификатором.
  • Исключения:
    • NotFoundException: Если режиссер с указанным идентификатором не найден.

createDirector(Director director)

  • HTTP Метод: POST
  • Путь: /directors
  • Описание: Создает нового режиссера.
  • Параметры:
    • director: Объект Director, содержащий информацию о новом режиссере.
  • Возвращает: Созданный объект Director с присвоенным идентификатором.
  • Исключения:
    • ValidationException: Если данные режиссера не проходят валидацию.
  • Статус ответа: 201 Created

update(Director director)

  • HTTP Метод: PUT
  • Путь: /directors
  • Описание: Обновляет информацию о существующем режиссере.
  • Параметры:
    • director: Объект Director, содержащий обновленную информацию о режиссере.
  • Возвращает: Объект Director с обновленной информацией.
  • Исключения:
    • NotFoundException: Если режиссер с указанным идентификатором не найден.
    • ValidationException: Если данные режиссера не проходят валидацию.

deleteDirector(long id)

  • HTTP Метод: DELETE
  • Путь: /directors/{id}
  • Описание: Удаляет режиссера по его идентификатору.
  • Параметры:
    • id: Идентификатор режиссера, которого необходимо удалить.
  • Исключения:
    • NotFoundException: Если режиссер с указанным идентификатором не найден.

Зависимости

  • DirectorDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Режиссер". Все операции, выполняемые контроллером, делегируются этому сервису.

Исключения

Контроллер обрабатывает следующие исключения:

  • NotFoundException: Выбрасывается, когда запрашиваемый ресурс (режиссер) не найден в базе данных.
  • ValidationException: Выбрасывается, когда данные, переданные для создания или обновления режиссера, не проходят
  • валидацию.

FilmController

FilmController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с фильмами. Он предоставляет точки для добавления, обновления и получения фильмов, а также для работы с лайками. Контроллер использует FilmDbService для управления данными.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/films"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как FilmDbService.

Методы

addLike(long id, long userId)

  • HTTP Метод: PUT
  • Путь: /films/{id}/like/{userId}
  • Описание: Добавляет лайк фильму с указанным id от пользователя с указанным userId.
  • Параметры:
    • id: Идентификатор фильма.
    • userId: Идентификатор пользователя.

deleteLike(long id, long userId)

  • HTTP Метод: DELETE
  • Путь: /films/{id}/like/{userId}
  • Описание: Удаляет лайк фильму с указанным id от пользователя с указанным userId.
  • Параметры:
    • id: Идентификатор фильма.
    • userId: Идентификатор пользователя.

addFilm(Film film)

  • HTTP Метод: POST
  • Путь: /films
  • Описание: Добавляет новый фильм в хранилище.
  • Параметры:
    • film: Объект Film, представляющий новый фильм.
  • Возвращает: Объект Film, представляющий добавленный фильм.
  • Статус ответа: 201 Created

getPopularFilms(Integer count, Integer genreId, Integer year)

  • HTTP Метод: GET
  • Путь: /films/popular
  • Описание: Возвращает список из count самых популярных фильмов.
  • Параметры:
    • count: Количество популярных фильмов для возврата.
    • genreId: Указывает жанр фильмов для возврата (необязательный).
    • year: Указывает год фильмов для возврата (необязательный).
  • Возвращает: Список из count самых популярных фильмов.

getAll()

  • HTTP Метод: GET
  • Путь: /films
  • Описание: Возвращает коллекцию всех фильмов в хранилище.
  • Возвращает: Коллекция всех фильмов.

update(Film updatedFilm)

  • HTTP Метод: PUT
  • Путь: /films
  • Описание: Обновляет информацию о фильме в хранилище.
  • Параметры:
    • updatedFilm: Объект Film, представляющий обновленную информацию о фильме.
  • Возвращает: Объект Film, представляющий обновленный фильм.

getFilmById(Long id)

  • HTTP Метод: GET
  • Путь: /films/{id}
  • Описание: Получает фильм с указанным id.
  • Параметры:
    • id: Идентификатор фильма.
  • Возвращает: Объект Film, представляющий фильм.

getCommonFilms(long userId, long friendId)

  • HTTP Метод: GET
  • Путь: /films/common
  • Описание: Возвращает список общих фильмов между двумя пользователями.
  • Параметры:
    • userId: Идентификатор первого пользователя.
    • friendId: Идентификатор второго пользователя.
  • Возвращает: Список общих фильмов.

getDirectorFilms(Long id, String sortBy)

  • HTTP Метод: GET
  • Путь: /films/director/{directorId}
  • Описание: Возвращает список фильмов одного режиссера, отсортированный по указанному параметру.
  • Параметры:
    • directorId: Идентификатор режиссера.
    • sortBy: Параметр сортировки (по умолчанию "year").
  • Возвращает: Список фильмов одного режиссера, отсортированный по указанному параметру.

deleteFilm(long id)

  • HTTP Метод: DELETE
  • Путь: /films/{id}
  • Описание: Удаляет фильм с указанным id.
  • Параметры:
    • id: Идентификатор фильма.

searchFilm(String query, String by)

  • HTTP Метод: GET
  • Путь: /films/search
  • Описание: Поиск фильмов по названию и режиссеру.
  • Параметры:
    • query: Значение для поиска.
    • by: Поиск выполнять по названию фильма, режиссера или вместе.
  • Возвращает: Результат поиска, список фильмов, соответствующих критериям.

Зависимости

  • FilmDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Фильм". Все операции, выполняемые контроллером, делегируются этому сервису.

FilmController предоставляет полный набор операций для управления сущностью "Фильм" в приложении. Он обеспечивает взаимодействие с клиентом через RESTful API, позволяя выполнять основные CRUD операции, а также операции с лайками и поиском фильмов. Все бизнес-логика и взаимодействие с данными реализованы в сервисе FilmDbService, что способствует разделению ответственности и улучшению тестируемости кода.

GenreController

GenreController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с жанрами фильмов. Он предоставляет API для получения информации о жанрах.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/genres"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как GenreDbStorage.

Методы

getAll()

  • HTTP Метод: GET
  • Путь: /genres
  • Описание: Получает список всех жанров.
  • Возвращает: Коллекция объектов Genre, представляющих все доступные жанры.

getGenreById(int id)

  • HTTP Метод: GET
  • Путь: /genres/{id}
  • Описание: Получает жанр по его идентификатору.
  • Параметры:
    • id: Идентификатор жанра, который необходимо получить.
  • Возвращает: Объект Genre, представляющий жанр с указанным идентификатором.
  • Исключения:
    • NotFoundException: Если жанр с указанным идентификатором не найден.

Зависимости

  • GenreDbStorage: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Жанр". Все операции, выполняемые контроллером, делегируются этому сервису.

GenreController предоставляет функциональность для работы с жанрами фильмов в приложении. Он обеспечивает взаимодействие с клиентом через RESTful API, позволяя получать информацию о всех жанрах и конкретных жанрах по их идентификаторам. Все бизнес-логика и взаимодействие с данными реализованы в сервисе GenreDbStorage, что способствует разделению ответственности и улучшению тестируемости кода.

MpaController

MpaController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с рейтингами фильмов (MPA). Он предоставляет API для получения информации о рейтингах.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/mpa"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как MpaDbService.

Методы

getAll()

  • HTTP Метод: GET
  • Путь: /mpa
  • Описание: Получает список всех рейтингов фильмов.
  • Возвращает: Коллекция объектов Mpa, представляющих все доступные рейтинги.

getMpaById(int id)

  • HTTP Метод: GET
  • Путь: /mpa/{id}
  • Описание: Получает рейтинг по его идентификатору.
  • Параметры:
    • id: Идентификатор рейтинга, который необходимо получить.
  • Возвращает: Объект Mpa, представляющий рейтинг с указанным идентификатором.
  • Исключения:
    • NotFoundException: Если рейтинг с указанным идентификатором не найден.

Зависимости

  • MpaDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "MPA". Все операции, выполняемые контроллером, делегируются этому сервису.

MpaController предоставляет функциональность для работы с рейтингами фильмов в приложении. Он обеспечивает взаимодействие с клиентом через RESTful API, позволяя получать информацию о всех рейтингах и конкретных рейтингах по их идентификаторам. Все бизнес-логика и взаимодействие с данными реализованы в сервисе MpaDbService, что способствует разделению ответственности и улучшению тестируемости кода.

ReviewController

ReviewController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с отзывами о фильмах. Он предоставляет API для получения, добавления, обновления и удаления отзывов, а также для управления лайками и дизлайками.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/reviews"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как ReviewService.

Методы

getReview(Long id)

  • HTTP Метод: GET
  • Путь: /reviews/{id}
  • Описание: Возвращает отзыв по его идентификатору.
  • Параметры:
    • id: Идентификатор отзыва.
  • Возвращает: Объект Review, соответствующий переданному идентификатору.

getReviewsForFilm(Long filmId, Integer count)

  • HTTP Метод: GET
  • Путь: /reviews
  • Описание: Возвращает список отзывов для определенного фильма. Если идентификатор фильма не указан, возвращаются все отзывы. Если указано количество отзывов, возвращается указанное количество самых полезных отзывов.
  • Параметры:
    • filmId: Идентификатор фильма (необязательный).
    • count: Количество отзывов, которые необходимо вернуть (необязательный).
  • Возвращает: Список отзывов.

addReview(Review review)

  • HTTP Метод: POST
  • Путь: /reviews
  • Описание: Добавляет новый отзыв.
  • Параметры:
    • review: Объект Review, содержащий данные нового отзыва.
  • Возвращает: Объект Review, содержащий данные добавленного отзыва.

updateReview(Review review)

  • HTTP Метод: PUT
  • Путь: /reviews
  • Описание: Обновляет существующий отзыв.
  • Параметры:
    • review: Объект Review, содержащий обновленные данные отзыва.
  • Возвращает: Объект Review, содержащий данные обновленного отзыва.

deleteReview(Long id)

  • HTTP Метод: DELETE
  • Путь: /reviews/{id}
  • Описание: Удаляет отзыв по его идентификатору.
  • Параметры:
    • id: Идентификатор отзыва.

addLikeInReview(Long reviewId, Long userId)

  • HTTP Метод: PUT
  • Путь: /reviews/{id}/like/{userId}
  • Описание: Добавляет лайк к отзыву.
  • Параметры:
    • reviewId: Идентификатор отзыва.
    • userId: Идентификатор пользователя, который ставит лайк.

addDislikeInReview(Long reviewId, Long userId)

  • HTTP Метод: PUT
  • Путь: /reviews/{id}/dislike/{userId}
  • Описание: Добавляет дизлайк к отзыву.
  • Параметры:
    • reviewId: Идентификатор отзыва.
    • userId: Идентификатор пользователя, который ставит дизлайк.

deleteLikeInReview(Long reviewId, Long userId)

  • HTTP Метод: DELETE
  • Путь: /reviews/{id}/like/{userId}
  • Описание: Удаляет лайк с отзыва.
  • Параметры:
    • reviewId: Идентификатор отзыва.
    • userId: Идентификатор пользователя, который удаляет лайк.

deleteDislikeInReview(Long reviewId, Long userId)

  • HTTP Метод: DELETE
  • Путь: /reviews/{id}/dislike/{userId}
  • Описание: Удаляет дизлайк с отзыва.
  • Параметры:
    • reviewId: Идентификатор отзыва.
    • userId: Идентификатор пользователя, который удаляет свой дизлайк.

Зависимости

  • ReviewService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Отзыв". Все операции, выполняемые контроллером, делегируются этому сервису

ReviewController предоставляет полный набор операций для управления отзывами о фильмах в приложении. Он обеспечивает взаимодействие с клиентом через RESTful API, позволяя выполнять основные CRUD операции, а также операции с лайками и дизлайками. Все бизнес-логика и взаимодействие с данными реализованы в сервисе ReviewService, что способствует разделению ответственности и улучшению тестируемости кода.

UserController

UserController — это REST-контроллер, который обрабатывает HTTP-запросы, связанные с пользователями. Он предоставляет методы для получения списка всех пользователей, добавления и удаления друзей, получения списка друзей и общих друзей, получения пользователя по идентификатору, создания и обновления пользователя.

Аннотации

  • @RestController: Указывает, что этот класс является контроллером REST.
  • @RequestMapping("/users"): Задает базовый путь для всех методов контроллера.
  • @RequiredArgsConstructor: Генерирует конструктор с обязательными аргументами для инициализации зависимостей, таких как UserDbService, FeedService и FilmDbService.

Методы

getAll()

  • HTTP Метод: GET
  • Путь: /users
  • Описание: Получает список всех пользователей.
  • Возвращает: Коллекция всех пользователей.

findById(long id)

  • HTTP Метод: GET
  • Путь: /users/{id}
  • Описание: Получает пользователя с идентификатором id.
  • Параметры:
    • id: Идентификатор пользователя.
  • Возвращает: Пользователь с указанным идентификатором.
  • Исключения:
    • NotFoundException: Если пользователь с указанным идентификатором не найден.

createUser(User user)

  • HTTP Метод: POST
  • Путь: /users
  • Описание: Создает нового пользователя.
  • Параметры:
    • user: Объект пользователя для создания.
  • Возвращает: Созданный пользователь.
  • Статус ответа: 201 Created

update(User updatedUser)

  • HTTP Метод: PUT
  • Путь: /users
  • Описание: Обновляет существующего пользователя.
  • Параметры:
    • updatedUser: Объект пользователя с обновленными данными.
  • Возвращает: Обновленный пользователь.

addFriend(long id, long friendId)

  • HTTP Метод: PUT
  • Путь: /users/{id}/friends/{friendId}
  • Описание: Добавляет пользователя с идентификатором friendId в список друзей пользователя с идентификатором id.
  • Параметры:
    • id: Идентификатор пользователя.
    • friendId: Идентификатор друга.

deleteFriend(long id, long friendId)

  • HTTP Метод: DELETE
  • Путь: /users/{id}/friends/{friendId}
  • Описание: Удаляет пользователя с идентификатором friendId из списка друзей пользователя с идентификатором id.
  • Параметры:
    • id: Идентификатор пользователя.
    • friendId: Идентификатор друга.

getUserFriends(long id)

  • HTTP Метод: GET
  • Путь: /users/{id}/friends
  • Описание: Получает список друзей пользователя с идентификатором id.
  • Параметры:
    • id: Идентификатор пользователя.
  • Возвращает: Список друзей пользователя.

getCommonFriends(long id, long otherId)

  • HTTP Метод: GET
  • Путь: /users/{id}/friends/common/{otherId}
  • Описание: Получает список общих друзей пользователей с идентификаторами id и otherId.
  • Параметры:
    • id: Идентификатор первого пользователя.
    • otherId: Идентификатор второго пользователя.
  • Возвращает: Список общих друзей.

getRecommendations(long id)

  • HTTP Метод: GET
  • Путь: /users/{id}/recommendations
  • Описание: Получает рекомендации фильмов для пользователя с идентификатором id.
  • Параметры:
    • id: Идентификатор пользователя.
  • Возвращает: Список рекомендованных фильмов.

getFeed(long id)

  • HTTP Метод: GET
  • Путь: /users/{id}/feed
  • Описание: Получает список действий пользователя.
  • Параметры:
    • id: Идентификатор пользователя.
  • Возвращает: Список действий пользователя.

deleteUser(long id)

  • HTTP Метод: DELETE
  • Путь: /users/{id}
  • Описание: Удаляет пользователя.
  • Параметры:
    • id: Идентификатор пользователя.

Зависимости

  • UserDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Пользователь". Все операции, выполняемые контроллером, делегируются этому сервису.
  • FeedService: Сервис, который управляет действиями пользователей и предоставляет информацию о действиях в виде ленты.
  • FilmDbService: Сервис, который отвечает за бизнес-логику и взаимодействие с базой данных для сущности "Фильм".

Подробная документация проекта находится в пакете javadoc

About

Template repository for Filmorate project.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages