Template repository for ExploreWithMe project.
Данный модуль добавляет поддержку комментариев к событиям (Event) с разграничением прав доступа для:
- пользователей
- администраторов
- публичного API (чтение только опубликованных комментариев)
Также во все методы получения событий (GET /.../events/...) добавлена агрегированная информация о количестве опубликованных комментариев, аналогично просмотрам и подтверждённым заявкам.
Пользователь может оставить комментарий к событию только если:
- Событие находится в состоянии PUBLISHED
- Пользователь является подтверждённым участником события
Иначе выбрасывается ConflictException.
Комментарий имеет поле commentState:
PUBLISHEDCANCELED
Публичное API видит только PUBLISHED комментарии.
Пользователь может:
- менять либо текст, либо статус (но не оба сразу, нет смысла менять комментарий и одновременно делать его CANCELED)
- редактировать только свои комментарии
- редактировать комментарий только для выбранного события
При изменении обновляется updatedOn.
Администратор:
- может менять и текст, и статус
- может корректировать
createdOnиupdatedOn - не ограничен владением комментария
Удалять может только админ (физически из БД).
Любой пользователь может получать:
GET /events/{eventId}/comments
и увидит только PUBLISHED комментарии.
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 |
GET /users/{userId}/comments/{commentId}
Базовый путь:
/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 |
GET /admin/comments/{commentId}
GET /events/{eventId}/comments
ВСЕГДА возвращает только PUBLISHED.
Параметры:
| param | desc |
|---|---|
| sort | ASC / DESC |
| from | offset |
| size | limit |
Во все GET эндпоинты событий добавлено поле:
comments
Это агрегированное количество опубликованных комментариев, вычисляемое аналогично:
- просмотрам (
views) - подтверждённым заявкам (
confirmedRequests)
Теперь:
✔ Пользователь может комментировать события, в которых участвовал ✔ Комментарии модерируются админом ✔ Публично видны только опубликованные комментарии ✔ В API событий возвращается агрегированное количество комментариев ✔ Поддержаны поиск, фильтрация, сортировка, пагинация.