Backend (src-api) — карта кода

Подсистема Версия: 0.2 draft

Навигатор по реализации backend в src-api: какой проект за что отвечает, где физически лежит каждый тип артефакта, каков стек и как запускать сервис. Backend в ранней стадии: реализован первый реальный read-срез (справочники ввода) по CQRS-контракту с единой обёрткой ответа; БД/EF, command-ветка и аутентификация ещё не введены. Прочитать ПЕРЕД реализацией backend — заменяет разведку по коду.

⟨/⟩ Исходник

1. Проекты (src-api)

Проект Роль
Ban.Icd.Api Веб-хост ASP.NET Core (net10): Program.cs (DI, OpenAPI, контроллеры, enum-как-строка, CORS, HttpClient), Controllers/, прикладной слой Application/. Сейчас Application/InputPackets/ (сдача SubmitInputPacketCommand — произвольный набор кадров без плана/ролей/идентификаторов, ADR-007; чтение очереди GetInputQueueQuery, удаление DeleteInputPacketCommand/ForceDeleteInputPacketCommand, обработка NormalizePacketCommand; InputPacketController = POST multipart, GET список, GET содержимое кадра (оригинал/обработанное), POST обработка кадра/пакета, DELETE мягкое/жёсткое); русские подписи идентификаторов — Application/CaptureLabels; общая обёртка Application/CommonModels/ (IcdBaseRequestResult, ErrorDetails, ErrorCode).
Ban.Icd.Cqrs Инфраструктура CQRS: Queries/ и Commands/ (IIcdQuery/IIcdCommand + Handler/Result/Processor), процессоры, IcdCqrsDiExtension (Register{Query,Command}Processor/Handlers). Pipeline-шаги ещё не введены.
Ban.Icd.Domain Доменные сущности и типы. Модуль Capture/: enum'ы и сущности пакета InputPacket/ImageFrame/PacketIdentifier (по спеке 50_Domain/Capture; планы съёмки убраны — ADR-007).
Ban.Icd.Infrastructure Инфраструктура: IClock, доступ к данным (Persistence/: IcdDbContext + EF-конфигурации + миграции, EF Core/PostgreSQL), файловое хранилище (Storage/IFileStorage + FileSystemFileStorage) и нормализация изображений (ImageProcessing/IImageNormalizer + OrthocoverImageNormalizer — HTTP-клиент orthocover, multipart, ADR-SRV-005); AddIcdInfrastructure.

2. Стек и текущее состояние

3. Соответствие spec → code

Раскладка спеки (sdaid) и кода (src-api) различаются — целевой маппинг:

sdaid (спека) src-api (код)
50_Domain/<Module>/<Entity> Ban.Icd.Domain/<Module>/<Entity>.cs
45_Api/Endpoints/<Area>/<Name> (endpoint + Command/Query + Result) Ban.Icd.Api/Application/<Area>/... + Ban.Icd.Api/Controllers/<Area>Controller.cs
55_Backend/Handlers/<Area>/<Name>Handler (canonical narrative) Ban.Icd.Api/Application/<Area>/<Name>Handler.cs
55_Backend/Services/<Area>/<Name> Ban.Icd.Infrastructure/... или прикладной сервис в Ban.Icd.Api
CQRS-контракты (IIcdQuery/IIcdQueryHandler, процессор) Ban.Icd.Cqrs
ADR бэкенда (40_Arch/Tech/CSharp/ADR_SRV_001..003) конвенции CQRS/обёртки/grid/EF, которым следует код

Каждый код-файл реализации несёт XML-<remarks> со ссылкой на артефакт спеки sdaid (правило в CLAUDE.md). Операции ввода/очереди описаны контрактом в спеке: 45_Api/Endpoints/InputPackets/{SubmitInputPacket, GetInputQueue, DeleteInputPacket, GetFrameContent, NormalizePacket} (endpoint + команда/запрос + результат), парные 55_Backend/Handlers/... (сценарии; у GetFrameContent handler-а нет — прямая отдача файла из хранилища); базовые типы — 45_Api/Based. Внешние интеграции — под своим ADR (нормализация изображений — ADR-SRV-005).

4. Сборка и запуск

dotnet build Ban.Icd.slnx
# БД: PostgreSQL по строке ConnectionStrings:IcdDb; применить миграции:
dotnet ef database update --project src-api/Ban.Icd.Infrastructure --startup-project src-api/Ban.Icd.Api
dotnet run --project src-api/Ban.Icd.Api --urls http://localhost:5080
# сдача:   POST http://localhost:5080/api/InputPacket   (multipart)
# очередь: GET  http://localhost:5080/api/InputPacket
# контракт/UI: /openapi/v1.json, /swagger (Development)

Особенности окружения (расположение dotnet SDK, DOTNET_ROOT для dotnet ef, доступ к PostgreSQL) относятся к конкретной машине разработчика и в спеке не фиксируются.

5. Связанные документы

Связанные артефакты

Документы