diff --git a/EventHubBackSpec.md b/EventHubBackSpec.md index dfcb05f..2a0d7c9 100644 --- a/EventHubBackSpec.md +++ b/EventHubBackSpec.md @@ -118,6 +118,13 @@ EventHub — платформа для управления событиями - Пользователи могут отправлять жалобы (`report`) на календари, события, отзывы. - Модераторы могут просматривать жалобы и принимать меры (скрывать контент, блокировать). - Список запрещённых слов (`banned_word`) для фильтрации контента. +- **Автомодерация** (`logic_automoderation`): + - Настройки (`automod_settings`, singleton): `keyword_action` (`reject` | `flag` | `censor`, default `flag`), `match_mode` (`word_boundary` | `substring`, default `word_boundary`), `report_threshold` (integer ≥ 1, default `3`). + - При create/update calendar (`title`, `description`), event (`title`, `description`), review (`comment`) выполняется scan бан-слов. + - `reject` — сохранение отклоняется (`400`, content banned); `censor` — маскирование `***` + hit в очередь; `flag` — сохранение + soft-hide + hit (`review` → `hidden`, `event`/`calendar` → `frozen`, reason `auto:keyword`). + - Порог жалоб: считаются только `pending`; при достижении порога — soft-hide (`auto:report_threshold`) + hit; dismissed/reviewed не учитываются. + - Очередь `automod_hit`: `open` | `approved` | `rejected`; approve восстанавливает сущность, reject оставляет/усиливает блокировку. + - WS админам: `automod_hit`; аудит от системного актора `system`. - Аудит действий администраторов (`admin_audit`). ### 2.8. Баг-трекер (автоматический) @@ -146,7 +153,7 @@ EventHub — платформа для управления событиями #### 2.10.1. Ролевая модель администраторов - `superadmin` — полный доступ, может управлять другими администраторами. - `admin` — управление пользователями, контентом, подписками. -- `moderator` — модерация контента (жалобы, отзывы). +- `moderator` — модерация контента (жалобы, отзывы, очередь автомодерации). - `support` — работа с тикетами. #### 2.10.2. Эндпоинты для управления ролями и аудитом @@ -259,7 +266,7 @@ src/ - `POST /v1/reviews` — создать отзыв. - `GET /v1/reviews` — список отзывов. - `PUT /v1/reviews/:id` — обновить отзыв. -- `POST /v1/reports` — пожаловаться. +- `POST /v1/reports` — пожаловаться (`target_type`: `event` | `calendar` | `review`). - `GET /v1/tickets` — тикеты пользователя. - `POST /v1/tickets` — создать или обновить тикет (дедуп по `error_hash`): body `{ error_message, stacktrace?, context?, source?: frontend|manual }`; ответ 201 (или 429 при rate-limit новых). - `GET /v1/tickets/:id` — статус тикета. @@ -275,6 +282,8 @@ src/ - `GET /v1/admin/reports`, `GET /v1/admin/reports/:id` — жалобы. - `DELETE /v1/admin/reviews/:id` — удалить отзыв. - `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова. +- `GET /v1/admin/automod/settings`, `PUT /v1/admin/automod/settings` — настройки автомодерации (чтение: admin/moderator; запись: admin/superadmin). +- `GET /v1/admin/automod/hits`, `PUT /v1/admin/automod/hits/:id` — очередь срабатываний (`status`: `approved` | `rejected`; фильтры `status`, `trigger`; доступ: admin/moderator). - `GET /v1/admin/tickets/stats` — статистика тикетов: `total_tickets`, `open`, `in_progress`, `resolved`, `closed`, `total_errors`. - `GET /v1/admin/tickets` — список с фильтрами `status`, `source`, `assigned_to`, `q`; `GET /v1/admin/tickets/:id` — управление тикетами. - `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки. diff --git a/EventHubFrontAdminSpec.md b/EventHubFrontAdminSpec.md index 4df0187..6df0388 100644 --- a/EventHubFrontAdminSpec.md +++ b/EventHubFrontAdminSpec.md @@ -5,8 +5,8 @@ | Роль | Идентификатор | Права | |---------------|---------------|---------------------------------------------------------------------------------------------------------| | Суперадмин | `superadmin` | Полный доступ ко всем модулям, включая изменение ролей других админов, просмотр аудита, системные настройки, управление администраторами. | -| Администратор | `admin` | Управление пользователями, событиями, жалобами, отзывами, бан-словами, тикетами, подписками. Нет доступа к аудиту и управлению администраторами. | -| Модератор | `moderator` | Работа с жалобами и отзывами. Остальные разделы недоступны. | +| Администратор | `admin` | Управление пользователями, событиями, жалобами, отзывами, бан-словами, настройками автомодерации, тикетами, подписками. Нет доступа к аудиту и управлению администраторами. | +| Модератор | `moderator` | Работа с жалобами, отзывами и очередью автомодерации. Остальные разделы недоступны. | | Поддержка | `support` | Работа с тикетами (баг-трекер). Остальные разделы недоступны. | Права проверяются на уровне фронтенда: пункты меню и маршруты (`RoleGuard` в `App.tsx`, конфиг `src/config/adminAccess.ts`) ограничены по роли из `GET /v1/admin/me`; при прямом URL без прав — страница 403. @@ -116,6 +116,15 @@ - Дата добавления отформатирована. - Форма добавления нового слова и кнопка удаления с подтверждением. +### 4.6.1. Автомодерация (настройки и очередь) + +Эндпоинты: `GET/PUT /v1/admin/automod/settings`, `GET /v1/admin/automod/hits`, `PUT /v1/admin/automod/hits/:id` + +Функциональность: +- Страница `/automod-settings` (роли `admin`, `superadmin`): `keyword_action`, `match_mode`, `report_threshold`. +- Inbox `/inbox/automod` (роли `admin`, `superadmin`, `moderator`): список hits, фильтр по статусу, Approve / Reject. +- WS-уведомление `automod_hit` открывает очередь автомодерации. + ### 4.7. Тикеты (баг-трекер) Эндпоинты: `GET /v1/admin/tickets` (фильтры `status`, `source`, `assigned_to`, `q`), `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id`; создание/авто-репорт: `POST /v1/tickets` (user/admin JWT). @@ -219,4 +228,4 @@ - Контракт селекторов: `e2e/TESTIDS.md` (`data-testid` + a11y). - **Mock-suite** (`npm run test:e2e`): в CI после lint/build; route-моки `**/v1/admin/**`. - **IFT smoke** (`npm run test:e2e:ift`): login → shell → logout против IFT; учётки `SMOKE_ADMIN_*` / `ADMIN_SUPER_*` из `EventHubDevOps/ift/.env`; workflow `e2e-ift.yml` после Deploy IFT. -- Coverage (mock): auth/roles, shell, inbox reports/tickets, reports/reviews CRUD-пути, explore users/calendars/events/subscriptions, banned-words, admins/audit/monitoring/profile, i18n. \ No newline at end of file +- Coverage (mock): auth/roles, shell, inbox reports/tickets/automod, reports/reviews CRUD-пути, explore users/calendars/events/subscriptions, banned-words, automod-settings, admins/audit/monitoring/profile, i18n. \ No newline at end of file