using System;
using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Endpoints.InputPackets.DeleteInputPacket;
using Ban.Sdaid.Icd.Domain.Capture;
using Ban.Sdaid.Icd.Arch.Adr;
namespace Ban.Sdaid.Icd.Backend.Handlers.InputPackets
{
/// <summary>Handler жёсткого (окончательного) удаления пакета.</summary>
public class ForceDeleteInputPacketHandler : IHandlerDocument, IFolder<BackendFolder>, IHasStructuralLinks
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Ban.Sdaid.Icd.Domain.BC_Icd>(),
Rel.Uses<InputPacketSpec>(),
Rel.Uses<DOC_DeleteInputPacket>(),
Rel.Uses<ADR_002_PacketIdentityAndFileKeys>(),
};
public static string _refName = "Handler ForceDeleteInputPacket";
public string Name => "Handler: ForceDeleteInputPacket (жёсткое)";
public string Description =>
@"Что произойдёт при вызове endpoint жёсткого удаления: окончательно удалить запись пакета (каскадом) и файлы кадров из хранилища.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Purpose = $"""
## Назначение
Жёсткое (необратимое) удаление пакета ({SdaidAnchors.RefTo<InputPacketSpec>()}) по
{SdaidAnchors.RefTo<DOC_DeleteInputPacket>()} (`{nameof(ForceDeleteInputPacketCommand)}`): стираются
и запись, и файлы. Доступно только при наличии права на команду — проверяется базовым хендлером
(ADR-SRV-006; модель доступа — ADR-011).
""";
public static string Scenario = $"""
## Сценарий вызова
1. Найти пакет по `{nameof(ForceDeleteInputPacketCommand.Id)}` с кадрами; нет — `404`.
2. Удалить файлы кадров из хранилища по ключам ({SdaidAnchors.RefTo<ADR_002_PacketIdentityAndFileKeys>()}).
3. Удалить запись пакета — кадры и идентификаторы уходят каскадом (правила сущностей/EF, ADR-SRV-003).
4. Вернуть `{nameof(DeletePacketResult)}` с `{nameof(DeletedPacketPayload)}`
(`{nameof(DeletedPacketPayload.Mode)}` = `force`).
""";
}
}