Skip to content

Conversation

@Kotezh
Copy link
Owner

@Kotezh Kotezh commented May 15, 2025

@Just-Roman:

  1. Реализовал Функциональность «Отзывы» - ветка add-reviews
  • Отзывы на фильмы. Добавленные отзывы должны имеют рейтинг и несколько дополнительных характеристик:
    Оценка — полезно/бесполезно, Тип отзыва — негативный/положительный.
  • добавил: теблицы reviews и reviews_likes в файле schema.sql;
  • создал и наполнил логикой: class Review, class ReviewRowMapper, class JdbcReviewRepositor , interface ReviewRepository, class ReviewServiceImpl, interface ReviewService, class ReviewController.
  • реализовал следующие API для отзывов:
    POST /reviews -Добавление нового отзыва.
    PUT /reviews -Редактирование уже имеющегося отзыва.
    DELETE /reviews/{id} -Удаление уже имеющегося отзыва.
    GET /reviews/{id} - Получение отзыва по идентификатору.
    GET /reviews?filmId={filmId}&count={count} -Получение всех отзывов по идентификатору фильма, если фильм не
    указан то все. Если кол-во не указано то 10.
  • реализовал следующие API для лайков к отзывам:
    PUT /reviews/{id}/like/{userId} — пользователь ставит лайк отзыву.
    PUT /reviews/{id}/dislike/{userId} — пользователь ставит дизлайк отзыву.
    DELETE /reviews/{id}/like/{userId} — пользователь удаляет лайк/дизлайк отзыву.
    DELETE /reviews/{id}/dislike/{userId} — пользователь удаляет дизлайк отзыву.
{
  "reviewId": 123,
  "content": "This film is sooo baad.",
  "isPositive": false,
  "userId": 123, // Пользователь
  "filmId": 2, // Фильм
  "useful": 20 // рейтинг полезности 
}
  1. Реализовал Функциональность «Лента событий» - ветка add-feed
  • Добавил возможность просмотра последних событий на платформе — добавление в друзья, удаление из друзей,
    лайки на фильмы и отзывы (написание, обновление удаление), которые оставлял пользователь.
  • добавил: теблицу activity в файле schema.sql; модель class Activity; API GET /users/{id}/feed;
    enum EventType, enum OperationType.
  • в классы JdbcFilmRepository, JdbcReviewRepository, JdbcUserRepository добавлена логика по наполнению
    таблицы activity.
[
  {
    "timestamp": 123344556,
    "userId": 123,
    "eventType": "LIKE", // одно из значениий LIKE, REVIEW или FRIEND
	"operation": "REMOVE", // одно из значениий REMOVE, ADD, UPDATE
    "eventId": 1234, //primary key
    "entityId": 1234   // идентификатор сущности, с которой произошло событие
  }
]

@Max-Browckin:

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

Найти пользователей с максимальным количеством пересечения по лайкам.
Определить фильмы, которые один пролайкал, а другой нет.
Рекомендовать фильмы, которым поставил лайк пользователь с похожими вкусами, а тот, для кого составляется рекомендация, ещё не поставил.
Более подробно подобный алгоритм описан в этой [статье](https://www.baeldung.com/java-collaborative-filtering-recommendations).

@slavakorg:

  1. Реализовал функциональность "Режиссеры" - ветка add-director.
  • В информацию о фильмах добавлено имя режиссёра и реализована функциональность:
    Вывод всех фильмов режиссёра, отсортированных по количеству лайков.
    Вывод всех фильмов режиссёра, отсортированных по годам.
  • GET /films/director/{directorId}?sortBy=[year,likes] Возвращает список фильмов режиссера отсортированных по количеству лайков или году выпуска.
  • POST /films
{
  "name": "New film",
  "releaseDate": "1999-04-30",
  "description": "New film about friends",
  "duration": 120,
  "mpa": { "id": 3},
  "genres": [{ "id": 1}],
  "director": [{ "id": 1}]
}
  • GET /directors - Список всех режиссёров
  • GET /directors/{id}- Получение режиссёра по id
  • POST /directors - Создание режиссёра
  • PUT /directors - Изменение режиссёра
{
  "id": 1,
  "name": "New director"
}
  • DELETE /directors/{id} - Удаление режиссёра
  1. Реализовал функциональность "Поиск" - ветка add-search.
  • Реализован поиск по названию фильмов и по режиссёру.
  • Алгоритм ищет по подстроке. Например, вы вводите «крад», а в поиске возвращаются следующие фильмы: «Крадущийся тигр, затаившийся дракон», «Крадущийся в ночи» и другие.
  • GET /fimls/search - Возвращает список фильмов, отсортированных по популярности.
  • Параметры строки запроса
    query — текст для поиска
    by — может принимать значения director (поиск по режиссёру), title (поиск по названию), либо оба значения через запятую при поиске одновременно и по режиссеру и по названию.
  • Пример:
    GET /films/search?query=крад&by=director,title

@Kotezh:

  1. Реализовала функциональность "Популярные фильмы" - ветка add-most-populars.
  • Добавлена возможность выводить топ-N фильмов по количеству лайков.
  • Фильтрация по двум параметрам:
    По жанру.
    За указанный год.
  • GET /films/popular?count={limit}&genreId={genreId}&year={year} Возвращает список самых популярных фильмов указанного жанра за нужный год.
  1. Реализовала функциональность "Общие фильмы"- ветка add-common-films.
  • Реализован вывод общих с другом фильмов с сортировкой по их популярности.
  • GET /films/common?userId={userId}&friendId={friendId} Возвращает список фильмов, отсортированных по популярности.
  • Параметры:
    userId — идентификатор пользователя, запрашивающего информацию;
    friendId — идентификатор пользователя, с которым необходимо сравнить список фильмов
  1. Реализовала функциональность "Удаление фильмов и пользователей" - ветка add-remove-endpoint
  • Реализована функциональность для удаления фильма и пользователя по идентификатору.
  • DELETE /users/{userId} Удаляет пользователя по идентификатору.
  • DELETE /films/{filmId} Удаляет фильм по идентификатору.

Nadezhda Kotegova and others added 30 commits May 6, 2025 22:28
Feature: Add remove endpoint - "Удаление фильмов и пользователей"
2. add methods: checkUserId, checkFilmId, checkReviewId for class ReviewServiceImpl
2. unification methods: deleteLike, deleteDislike   in  deleteReaction  for class ReviewServiceImpl, class deleteReaction, interface ReviewRepository, interface ReviewService
Add director - Добавление режиссёров в фильмы.
# Conflicts:
#	src/main/java/ru/yandex/practicum/filmorate/controller/FilmController.java
#	src/main/java/ru/yandex/practicum/filmorate/dal/FilmRepository.java
#	src/main/java/ru/yandex/practicum/filmorate/dal/JdbcFilmRepository.java
#	src/main/java/ru/yandex/practicum/filmorate/service/FilmService.java
#	src/main/java/ru/yandex/practicum/filmorate/service/FilmServiceImpl.java
Ветка для реализации задачи add-reviews.
@Kotezh Kotezh closed this May 15, 2025
@Kotezh Kotezh reopened this May 15, 2025
Copy link

@avfyodorov avfyodorov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добрый вечер, Надежда!

Вы отлично поработали над проектом. Функционал задач реализован в соответствии с техническим заданием, грамотно разобрались с взаимодействием слоев Controller - service - repository. Несмотря на то, что это первый групповой проект, результат можно считать очень хорошим.

От меня только несколько мелких уточнений, часть из них на ваше усмотрение.

Copy link

@avfyodorov avfyodorov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добрый день, Надежда!

Замечаний нет.
Групповой проект принят.

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

@Kotezh Kotezh merged commit 9fc51b6 into main May 18, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants