Роутер tickets отвечает за систему поддержки: создание тикетов, отправка сообщений, управление статусами. Административные операции (назначение, закрытие чужих тикетов) находятся в ticketsAdmin. Путь: trpc.tickets.*

Вложенные роутеры

categories

categories.list

Получение списка активных категорий тикетов.
  • Тип: query
  • Доступ: publicProcedure
Ответ: массив категорий, отсортированных по порядку.

Процедуры

list

Получение списка тикетов текущего пользователя с пагинацией.
  • Тип: query
  • Доступ: protectedProcedure
status
string
Фильтр по статусу: open, in_progress, waiting, closed, all (по умолчанию all)
limit
number
Количество (1–50, по умолчанию 20)
offset
number
Смещение (по умолчанию 0)
Ответ:
tickets
array
Массив тикетов с категорией и сервером
total
number
Общее количество тикетов

get

Получение тикета по ID с сообщениями.
  • Тип: query
  • Доступ: protectedProcedure
id
number
required
ID тикета
Тикет доступен его автору, сотрудникам поддержки (права admin.*, tickets.*, moderator.* или роль admin), а также модератору, назначенному на тикет. Иначе возвращается FORBIDDEN.

create

Создание нового тикета.
  • Тип: mutation
  • Доступ: protectedProcedure
categoryId
number
required
ID категории
serverId
number
ID сервера (если тикет привязан к серверу)
subject
string
required
Тема тикета (5–255 символов)
message
string
required
Текст первого сообщения (10–5000 символов)
Приоритет нового тикета всегда устанавливается в normal. Если категория имеет флаг requireServer, поле serverId обязательно.

uploadAttachment

Загрузка вложения к тикету (base64) в объектное хранилище.
  • Тип: mutation
  • Доступ: protectedProcedure
ticketId
number
required
ID тикета
fileName
string
required
Имя файла (1–255 символов; допустимы только a-z A-Z 0-9 . _ - и пробел)
data
string
required
Содержимое файла в base64
contentType
string
required
MIME-тип файла
Разрешены только типы image/png, image/jpeg, image/gif, image/webp, image/avif, application/pdf. Опасные расширения (html, svg, js, php, exe и др.) запрещены. Максимальный размер файла — 10 МБ. Загрузка недоступна для закрытых тикетов.
Ответ:
url
string
Публичный URL загруженного файла
key
string
Ключ объекта в хранилище
fileName
string
Имя файла
contentType
string
MIME-тип файла
size
number
Размер файла в байтах

sendMessage

Отправка сообщения в тикет.
  • Тип: mutation
  • Доступ: protectedProcedure
ticketId
number
required
ID тикета
message
string
Текст сообщения (до 5000 символов)
attachments
array
Массив URL вложений (до 10, каждый — валидный URL)
Необходимо указать message либо хотя бы одно вложение в attachments. Сообщение в закрытый тикет отправить нельзя.

close

Закрытие тикета автором или сотрудником поддержки.
  • Тип: mutation
  • Доступ: protectedProcedure
ticketId
number
required
ID тикета
rating
number
Оценка обслуживания (1–5)
ratingComment
string
Комментарий к оценке (до 500 символов)

reopen

Переоткрытие закрытого тикета.
  • Тип: mutation
  • Доступ: protectedProcedure
ticketId
number
required
ID тикета
Переоткрыть тикет может только его автор, и только если тикет находится в статусе closed. Оценка (rating/ratingComment) при этом сбрасывается.

Статусы тикетов

СтатусОписание
openОткрыт, ожидает ответа от поддержки
in_progressВ работе у модератора
waitingОжидает ответа от пользователя
closedЗакрыт