Skip to content

Repository files navigation

java-explore-with-me

Template repository for ExploreWithMe project.

Этап 3. Дополнительная функциональность

#4

📌 Функционал комментариев к событиям

Данный модуль добавляет поддержку комментариев к событиям (Event) с разграничением прав доступа для:

  • пользователей
  • администраторов
  • публичного API (чтение только опубликованных комментариев)

Также во все методы получения событий (GET /.../events/...) добавлена агрегированная информация о количестве опубликованных комментариев, аналогично просмотрам и подтверждённым заявкам.


🧠 Бизнес-логика

✔ Кто может добавлять комментарии

Пользователь может оставить комментарий к событию только если:

  1. Событие находится в состоянии PUBLISHED
  2. Пользователь является подтверждённым участником события

Иначе выбрасывается ConflictException.

✔ Статусы комментариев

Комментарий имеет поле commentState:

  • PUBLISHED
  • CANCELED

Публичное API видит только PUBLISHED комментарии.

✔ Редактирование комментариев

Пользователь может:

  • менять либо текст, либо статус (но не оба сразу, нет смысла менять комментарий и одновременно делать его CANCELED)
  • редактировать только свои комментарии
  • редактировать комментарий только для выбранного события

При изменении обновляется updatedOn.

Администратор:

  • может менять и текст, и статус
  • может корректировать createdOn и updatedOn
  • не ограничен владением комментария

✔ Удаление

Удалять может только админ (физически из БД).

✔ Публичный доступ

Любой пользователь может получать:

GET /events/{eventId}/comments

и увидит только PUBLISHED комментарии.


🔗 API

👤 Private API (для залогиненного пользователя)

➕ Добавить комментарий

POST /users/{userId}/events/{eventId}/comments

Создаёт опубликованный комментарий, если пользователь — подтверждённый участник.


✏ Обновить свой комментарий

PATCH /users/{userId}/events/{eventId}/comments/{commentId}

Можно менять либо текст, либо статус за один акт редактирования.


📜 Получить все свои комментарии на событие

GET /users/{userId}/events/{eventId}/comments

Фильтры:

param desc
state фильтр по статусу
sort ASC / DESC
from offset
size limit

📜 Получить все свои комментарии (по всем событиям)

GET /users/{userId}/comments

Фильтры:

param desc
state фильтр по статусу
sort ASC / DESC
from offset
size limit

🔍 Получить свой комментарий по id

GET /users/{userId}/comments/{commentId}

🛡 Admin API

Базовый путь:

/admin/comments

✏ Обновить комментарий

PATCH /admin/comments/{commentId}

Админ может менять:

  • текст
  • статус
  • createdOn
  • updatedOn

🗑 Удалить комментарий

DELETE /admin/comments/{commentId}

📜 Получить список комментариев

GET /admin/comments

Фильтры:

param desc
userId комментарии пользователя
eventId комментарии события
state статус
sort ASC / DESC
from offset
size limit

🔍 Получить комментарий по id

GET /admin/comments/{commentId}

🌍 Public API

📜 Получить опубликованные комментарии события

GET /events/{eventId}/comments

ВСЕГДА возвращает только PUBLISHED.

Параметры:

param desc
sort ASC / DESC
from offset
size limit

🔢 Агрегация количества комментариев

Во все GET эндпоинты событий добавлено поле:

comments

Это агрегированное количество опубликованных комментариев, вычисляемое аналогично:

  • просмотрам (views)
  • подтверждённым заявкам (confirmedRequests)

✅ Результат

Теперь:

✔ Пользователь может комментировать события, в которых участвовал ✔ Комментарии модерируются админом ✔ Публично видны только опубликованные комментарии ✔ В API событий возвращается агрегированное количество комментариев ✔ Поддержаны поиск, фильтрация, сортировка, пагинация.

About

Template repository for ExploreWithMe project.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages