diff --git a/EventHubBackSpec.md b/EventHubBackSpec.md index db34194..dfcb05f 100644 --- a/EventHubBackSpec.md +++ b/EventHubBackSpec.md @@ -121,9 +121,14 @@ EventHub — платформа для управления событиями - Аудит действий администраторов (`admin_audit`). ### 2.8. Баг-трекер (автоматический) -- При возникновении ошибок сервер автоматически создаёт тикет (`ticket`). -- Тикет содержит хеш ошибки, сообщение, стектрейс, контекст, количество повторений. -- Администраторы могут просматривать тикеты, назначать ответственных, менять статус. +- Источники тикетов (`source`): `backend` (HTTP 500 / внутренние ошибки), `frontend` (клиентский crash), `manual` (ручной репорт). +- При HTTP 500 сервер асинхронно регистрирует тикет через `logic_ticket:report_error` (ответы по путям `/tickets` не репортятся — защита от рекурсии). +- Клиент и ручной репорт: `POST /v1/tickets` с `error_message`, опционально `stacktrace`, `context`, `source` (`frontend` | `manual`). Ручной `manual` — сценарий end-user клиентов, не Admin SPA. +- Тикет содержит `error_hash` (sha256 от source + сообщение + fingerprint стека; для `manual` — source + user_id + сообщение), стектрейс, JSON-контекст, счётчик повторений. +- Дедуп: открытый тикет (`open` / `in_progress`) с тем же `error_hash` — увеличивается `count` и `last_seen`; после `resolved`/`closed` повтор создаёт новый тикет (регрессия). +- Новые тикеты лимитируются (~30/мин на узел); повторы по hash не ограничиваются. +- При создании нового тикета администраторам уходит WS `ticket_created`. +- Администраторы могут просматривать тикеты (фильтр `source`), назначать ответственных, менять статус. ### 2.9. Платная подписка - Пользователи могут оформить подписку (`subscription`) с разными планами: monthly, quarterly, @@ -256,7 +261,7 @@ src/ - `PUT /v1/reviews/:id` — обновить отзыв. - `POST /v1/reports` — пожаловаться. - `GET /v1/tickets` — тикеты пользователя. -- `POST /v1/tickets` — создать тикет. +- `POST /v1/tickets` — создать или обновить тикет (дедуп по `error_hash`): body `{ error_message, stacktrace?, context?, source?: frontend|manual }`; ответ 201 (или 429 при rate-limit новых). - `GET /v1/tickets/:id` — статус тикета. - `GET /v1/subscription` — подписка пользователя. - `GET /v1/calendars/:calendar_id/view?month=YYYY-MM` — HTML-календарь (владелец), включая архив. @@ -271,7 +276,7 @@ src/ - `DELETE /v1/admin/reviews/:id` — удалить отзыв. - `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова. - `GET /v1/admin/tickets/stats` — статистика тикетов: `total_tickets`, `open`, `in_progress`, `resolved`, `closed`, `total_errors`. -- `GET /v1/admin/tickets`, `GET /v1/admin/tickets/:id` — управление тикетами. +- `GET /v1/admin/tickets` — список с фильтрами `status`, `source`, `assigned_to`, `q`; `GET /v1/admin/tickets/:id` — управление тикетами. - `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки. - `PUT /v1/admin/:target_type/:id` — модерация. - `GET /v1/admin/me` — профиль администратора. diff --git a/EventHubFrontAdminSpec.md b/EventHubFrontAdminSpec.md index a1ef48a..4df0187 100644 --- a/EventHubFrontAdminSpec.md +++ b/EventHubFrontAdminSpec.md @@ -118,16 +118,18 @@ ### 4.7. Тикеты (баг-трекер) -Эндпоинты: `GET /v1/admin/tickets`, `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id` +Эндпоинты: `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). Функциональность: - Статистика вверху: открыто, в работе, решено, закрыто. -- Список с серверной пагинацией и сортировкой. +- Список с серверной пагинацией и сортировкой; колонка и фильтр `source` (`backend` / `frontend` / `manual`). - Первая колонка — иконка для перехода на детальную страницу. - Резолвинг назначенного администратора (ссылка с ником/email). - Статусы раскрашены (open — красный, in_progress — синий, resolved — зелёный, closed — серый). -- Детальная страница: все поля тикета, отправитель как ссылка на пользователя, назначенный администратор как ссылка, форма изменения статуса с выбором администратора из списка (email — ник). +- Детальная страница: все поля тикета (включая `source`), отправитель как ссылка на пользователя, назначенный администратор как ссылка, форма изменения статуса с выбором администратора из списка (email — ник). - Кнопка удаления с подтверждением. +- Авто-capture ошибок самой Admin SPA: `window.onerror`, `unhandledrejection`, `ErrorBoundary` → `POST /v1/tickets` (`source=frontend`) с throttle. +- Ручной баг-репорт (`source=manual`) — клиентский сценарий end-user приложений через `POST /v1/tickets`, не UI Control Center. ### 4.8. Подписки (Subscriptions)