Endpoint: GetInputQueue

API-контракт Версия: 0.1 draft

Список пакетов очереди обработки с составом (кадры и идентификаторы) для страницы «Обработка очереди». Мягко удалённые пакеты исключены. Поведение — GetInputQueueHandler.

⟨/⟩ Исходник

1. Транспорт

GET /api/InputPacket — параметров нет; ответ в единой обёртке (Payload ниже). Пагинации пока нет (упрощённый просмотр): список отсортирован от новых к старым, мягко удалённые исключены.

2. Endpoint

/// <summary>Endpoint выдачи очереди пакетов.</summary>
public class GetInputQueueEndpoint
{
    public GetInputQueueQuery? Input { get; set; }
    public GetInputQueueResult? Output { get; set; }
}

3. Query

/// <summary>Запрос очереди (без параметров).</summary>
public class GetInputQueueQuery : BasedQuery
{
}

4. Result

/// <summary>Результат — список пакетов в поле Payload.</summary>
public class GetInputQueueResult : BasedResult
{
    public InputQueuePayload? Payload { get; init; }
}

5. Payload

/// <summary>Полезная нагрузка очереди.</summary>
public class InputQueuePayload
{
    /// <summary>Пакеты очереди, от новых к старым.</summary>
    public QueuePacketItem[] Packets { get; init; } = new QueuePacketItem[0];
}

6. PacketItem / FrameItem / IdentifierItem

/// <summary>Пакет очереди: сводка и состав.</summary>
public class QueuePacketItem
{
    public Guid Id { get; init; }

    /// <summary>Номер вида П-ГГГГММДД-NNN.</summary>
    public string Number { get; init; } = "";

    public DateTime QueuedAt { get; init; }

    public int FramesCount { get; init; }

    /// <summary>Состояние жизненного цикла; пока только `Queued` — обработки ещё нет.</summary>
    public string State { get; init; } = "Queued";

    public QueueFrameItem[] Frames { get; init; } = new QueueFrameItem[0];
    public QueueIdentifierItem[] Identifiers { get; init; } = new QueueIdentifierItem[0];
}
/// <summary>Кадр в составе пакета.</summary>
public class QueueFrameItem
{
    public int Order { get; init; }

    /// <summary>Русская подпись роли изображения; null — роль ещё не определена (на вводе не задаётся).</summary>
    public string? RoleName { get; init; }

    /// <summary>Способ получения кадра.</summary>
    [Relation]
    public ImageSource Source { get; init; }

    /// <summary>Ключ хранения кадра (ADR-002); по нему отдаётся содержимое (GetFrameContent).</summary>
    public string StorageKey { get; init; } = "";

    public string? OriginalFileName { get; init; }

    /// <summary>Есть обработанная (нормализованная) версия кадра — ADR-SRV-005.</summary>
    public bool Normalized { get; init; }

    /// <summary>Флаг качества/режима нормализации (напр. low_quality); null — нет.</summary>
    public string? NormalizationFlag { get; init; }
}
/// <summary>Идентификатор в составе пакета: подпись и значение.</summary>
public class QueueIdentifierItem
{
    public string Name { get; init; } = "";
    public string Value { get; init; } = "";
}