using System;
using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Endpoints.InputPackets.GetInputQueue;
using Ban.Sdaid.Icd.Domain.Capture;
namespace Ban.Sdaid.Icd.Backend.Handlers.InputPackets
{
/// <summary>Handler выдачи очереди пакетов обработки.</summary>
public class GetInputQueueHandler : IHandlerDocument, IFolder<BackendFolder>, IHasStructuralLinks
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Ban.Sdaid.Icd.Domain.BC_Icd>(),
Rel.Uses<InputPacketSpec>(),
Rel.Uses<DOC_GetInputQueue>(),
};
public static string _refName = "Handler GetInputQueue";
public string Name => "Handler: GetInputQueue";
public string Description =>
@"Что произойдёт при вызове endpoint GetInputQueue: собрать список пакетов очереди с составом, исключив мягко удалённые.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Purpose = $"""
## Назначение
Канонический сценарий обработки {SdaidAnchors.RefTo<DOC_GetInputQueue>()}
(`{nameof(GetInputQueueQuery)}`). Отдаёт странице «Обработка очереди» список пакетов
({SdaidAnchors.RefTo<InputPacketSpec>()}) с их составом — кадрами и идентификаторами.
""";
public static string Scenario = $"""
## Сценарий вызова
1. Прочитать пакеты из БД, **исключив мягко удалённые** (`{nameof(InputPacket.Deleted)}` = true),
с кадрами и идентификаторами; отсортировать от новых к старым по `{nameof(InputPacket.QueuedAt)}`.
2. Смаппить в `{nameof(QueuePacketItem)}`: русские подписи ролей (если роль уже определена; на вводе
не задаётся — тогда null) и видов идентификаторов.
3. Вернуть `{nameof(GetInputQueueResult)}` с `{nameof(InputQueuePayload)}`.
Операция только читает — записи и ветвлений по правам в ней нет.
""";
}
}