Skip to content

Conversation

@impatient0
Copy link
Owner

@impatient0 impatient0 commented Jun 1, 2025

Описание

Данный Pull Request содержит реализацию Этапа 3 проекта "Explore With Me" – дополнительной функциональности "Комментарии к событиям".

Обзор реализованной функциональности "Комментарии":

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

Ключевые реализованные аспекты:

  1. Новая сущность Comment:

    • Создана JPA-сущность Comment со связями к User (автор) и Event (событие).
    • Реализовано "мягкое" удаление (флаг isDeleted) и отслеживание редактирования (флаг isEdited).
    • Настроено каскадное удаление комментариев при удалении связанных событий или авторов.
    • Используется JPA Auditing для полей createdOn и updatedOn.
  2. Интеграция с Event:

    • В сущность Event добавлено поле commentsEnabled (boolean, default true), позволяющее инициаторам и администраторам управлять возможностью комментирования для каждого события.
  3. API для комментариев (согласно обновленной спецификации):

    • Private API (/users/{userId}/comments):
      • Создание нового комментария к опубликованному событию (с проверкой commentsEnabled).
      • Редактирование своего комментария (с ограничением по времени – 6 часов).
      • "Мягкое" удаление своего комментария.
      • Получение списка своих комментариев (с пагинацией).
    • Admin API (/admin/comments):
      • "Мягкое" удаление любого комментария.
      • Восстановление "мягко" удаленного комментария.
      • Получение списка всех комментариев с возможностью фильтрации (по автору, событию, статусу isDeleted) и пагинацией. Ответы для администратора включают поле isDeleted.
    • Public API (/events/{eventId}/comments):
      • Получение списка не удаленных комментариев для указанного опубликованного события (с проверкой commentsEnabled).
      • Поддерживается пагинация и сортировка (по умолчанию по дате создания, сначала новые).
  4. DTO и Маппинг:

    • Созданы необходимые DTO (NewCommentDto, UpdateCommentDto, CommentDto, CommentAdminDto) для работы с комментариями.
    • Реализованы мапперы (MapStruct) для преобразования между сущностями и DTO.
  5. Тестирование:

    • Функциональность основного сервиса, реализованная на предыдущих этапах, остаётся работоспособной.
    • Подготовлена Postman-коллекция (postman/feature.json) с базовыми тестами для всех новых эндпоинтов, реализующих фичу "Комментарии". Тесты проверяют коды ответов, формат JSON и содержимое полей.

Документация:

  • Файл README.md обновлен: указана выбранная фича "Комментарии" и добавлено краткое описание ее реализации и новых эндпоинтов. Спецификация API (ewm-main-service-spec.json) обновлена и содержит добавленные в рамках реализации фичи эндпойнты.

Peppe-Ronin and others added 13 commits May 27, 2025 14:25
* add the "commentsEnabled" flag to Event

* create Comment entity

* create Comment DTOs

* add comment repository and mapper

* create CommentMapper unit tests

* checkstyle

* add empty postman collection to pass checks

---------

Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
* COMMENTS-PUBLIC: Получение комментариев к событию
#85
Первичное исполнение без тестов.

* Исправление стиля.

* Исправление замечаний и добавление тестов

* Исправление стиля
…86 (#97)

* COMMENTS-PRIVATE: Создание комментария пользователем

* COMMENTS-PRIVATE: Обновление своего комментария

* fixiki

* fixiki

* правки

* правки

* fixiki
Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
* COMMENTS-PRIVATE: Получение списка своих комментариев

* правки
…103)

* fix comment update timestamp in server response

* might as well

* update tests to interact with correct repository method

---------

Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
* добавила эндпоинты на удаление коммента

* стиль

* правки

* стиль
* add admin search params and update service interface

* implement admin comment search

* add/refactor integration tests for CommentServiceImpl

* fix interaction with null predicate (also in EventService)

* update CommentServiceImpl unit tests

* implement the admin comment search endpoint

* create unit tests for event admin controller

* fix stats-local launch config

* add `@Positive` constraints to request parameters

* remove explicit empty list check

* remove explicit empty list check

* cleanup

* uncomment service unit tests

---------

Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
* create admin dto for comments

* add new mappings

* update mapper tests

* make service return admin dto for admin methods

* make controller respond with admin dto for admin endpoints

* update tests to use correct dto

---------

Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
* create tests for comments endpoints

* add more test for 400 Bad Request scenarios

---------

Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
@impatient0 impatient0 self-assigned this Jun 1, 2025
Co-authored-by: Pepe Ronin <ivanpetrovskiy98@gmail.com>
Copy link

@kesch9 kesch9 left a comment

Choose a reason for hiding this comment

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

Approve

@impatient0 impatient0 merged commit 7076a1b into main Jun 2, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants