⟨/⟩ 55_Backend/Handlers/InputPackets/ForceDeleteInputPacketHandler.cs

52 строк · в начало

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`).
            """;
    }
}