using System;
using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Based;
namespace Ban.Sdaid.Icd.Api.Endpoints.InputPackets.DeleteInputPacket
{
/// <summary>Документ-обёртка над endpoint удаления пакета — мягкое и жёсткое.</summary>
public class DOC_DeleteInputPacket : IApiContractDocument, IFolder<ApiFolder>, IHasStructuralLinks
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Ban.Sdaid.Icd.Backend.Handlers.InputPackets.DeleteInputPacketHandler>(),
Rel.Uses<Ban.Sdaid.Icd.Backend.Handlers.InputPackets.ForceDeleteInputPacketHandler>(),
};
public static string _refName = "Endpoint DeleteInputPacket";
public string Name => "Endpoint: DeleteInputPacket";
public string Description =>
@"Удаление пакета из очереди двух видов: мягкое (пометка, скрытие, обратимо) и жёсткое (окончательное, с файлами). Поведение — DeleteInputPacketHandler / ForceDeleteInputPacketHandler.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Transport = """
## Транспорт
- `DELETE /api/InputPacket/{id}` — **мягкое** удаление: пометка `Deleted`, пакет скрывается из очереди;
запись и файлы сохраняются (обратимо). Оператору доступно по умолчанию.
- `DELETE /api/InputPacket/{id}/force` — **жёсткое** удаление: окончательно удаляет запись (каскадом —
кадры и идентификаторы) и файлы кадров из хранилища (необратимо). Доступно только по праву на
эту команду (claim; модель доступа — ADR-011).
Параметр `id` — в пути, тела запроса нет. Ответ обоих — единая обёртка с `Payload` (вид удаления в `Mode`).
`404`, если пакет не найден.
""";
public static string Body = $"""
## Command (мягкое)
{SdaidCode.OfClass<DeleteInputPacketCommand>()}
## Command (жёсткое)
{SdaidCode.OfClass<ForceDeleteInputPacketCommand>()}
## Result
{SdaidCode.OfClass<DeletePacketResult>()}
## Payload
{SdaidCode.OfClass<DeletedPacketPayload>()}
""";
}
/// <summary>Команда мягкого удаления пакета.</summary>
public class DeleteInputPacketCommand : BasedCommand
{
/// <summary>Идентификатор пакета.</summary>
public Guid Id { get; init; }
}
/// <summary>Команда жёсткого (окончательного) удаления пакета.</summary>
public class ForceDeleteInputPacketCommand : BasedCommand
{
/// <summary>Идентификатор пакета.</summary>
public Guid Id { get; init; }
}
/// <summary>Результат удаления (общий для мягкого и жёсткого).</summary>
public class DeletePacketResult : BasedResult
{
/// <summary>Сведения об удалённом пакете; null при ошибке (например, пакет не найден).</summary>
public DeletedPacketPayload? Payload { get; init; }
}
/// <summary>Удалённый пакет: идентификатор, номер и вид удаления.</summary>
public class DeletedPacketPayload
{
public Guid Id { get; init; }
public string Number { get; init; } = "";
/// <summary>Вид удаления: `soft` (мягкое) или `force` (жёсткое).</summary>
public string Mode { get; init; } = "";
}
}