# SupportService ## Назначение Упрощённый сервис технической поддержки: принимает обращения пользователей, отдаёт список тикетов для интерфейсов менеджеров/админки и позволяет закрывать запросы. Контроль доступа - из сессионных данных (NBSession). ## Публичные методы * `CreateRequestAsync(request): SupportRequest` - создать новый тикет с данными пользователя и сообщением. Возвращает созданную запись. * `CloseRequestAsync(requestId): void` - закрыть тикет по идентификатору (устанавливает флаг закрытия и время закрытия). * `GetRequestsAsync(onlyActive = true, skip = 0, take = 10): SupportRequest[]` - вернуть список запросов с пагинацией. По умолчанию - только активные (не закрытые). ### Типовые сценарии 1. **Пользовательское обращение:** фронт отправляет форму → `CreateRequestAsync` → запись видна менеджерам. 2. **Обработка и закрытие:** менеджер решает вопрос → `CloseRequestAsync(id)` → тикет скрывается из «активных». 3. **Список для админки:** `GetRequestsAsync(onlyActive:true, skip, take)` для инбокса, `onlyActive:false` - архив. ## Модели ### SupportRequest Сущность тикета поддержки со встроенной очисткой и валидацией. ``` int Id – идентификатор запроса в поддержку long FromUserId – идентификатор пользователя (если авторизован) string Reason – общая причина обращения (например, «Покупка товара») string Message – текст сообщения пользователя string UserName – имя пользователя string UserEmail – email пользователя string UserPhone – телефон пользователя bool IsClosed – признак, что обращение закрыто DateTimeOffset Created – дата и время создания обращения DateTimeOffset Closed – дата и время закрытия обращения ``` ## DB Содержит таблицы и индексы ``` -- Migration 1 requests ( Id INTEGER PRIMARY KEY AUTOINCREMENT, FromUserId INTEGER NOT NULL, Reason TEXT NOT NULL, Message TEXT NOT NULL, UserName TEXT NOT NULL, UserEmail TEXT NOT NULL, UserPhone TEXT NOT NULL, IsClosed BOOLEAN NOT NULL DEFAULT FALSE, Created NUMBER NOT NULL, Closed NUMBER DEFAULT NULL ) ``` [Назад](/index.md)