Правила документирования Chessboard.Panoramas
Назначение
Описание структуры документации микросервиса Panoramas и правил оформления постановок задач для wiki.
Структура документации
- api — по одному файлу на контроллер (Admin: PanoramaPoints, QueueTasks; Developers: обзор-заглушка).
- domain — по одному файлу на команду/запрос (Admin Domain, Developers Domain). Каждый документ — постановка задачи с секциями: Назначение, Цель, Входные данные, Результат, Бизнес-логика, Валидация, Ограничения, События, Связанные сущности, API.
- database — по одному файлу на сущность (entities), отдельно owned types и один файл enums. Ссылки между сущностями и типами (FK, «Используется в»).
- events — Kafka consumers (входящие события из Talent.Chessboard.Events), MediatR-уведомления (AfterFileUploaded, AfterFileDeleted).
- sagas — FileUpload, FileDelete (триггеры, payload, шаги).
CQRS-блоки в Domain
В описании метода явно выделяются три блока:
- Command / Query (Входные данные) — таблица полей с обязательностью (Обязательное / Nullable).
- Result (Выходные данные) — таблица полей ответа. Для списков: поле Entries (коллекция или PagingResult), элементы — тип ResultEntry. Пагинация — PagingQuery (take, offset).
- Handler (Бизнес-логика) — пошаговый алгоритм без привязки к коду (без упоминания MediatR, класса handler).
Шаблоны формулировок бизнес-логики
- Получение по Id: Получить сущность X из таблицы XEntity по полю = значение из request. Если не найдена — вернуть ошибку. Получить связанные сущности по условию. Сформировать объект результата. Вернуть результат клиенту.
- Поиск с пагинацией: Найти сущности X из XEntity по условиям из Query. PagingQuery: take, offset. Получить идентификаторы связанных сущностей; загрузить связанные сущности по Id. Сформировать результат, сопоставить Id и модели. Вернуть результат клиенту.
- Создание: Провалидировать зависимости (получить по Id из БД). Если не найдены — ошибка. Создать сущность X в таблице XEntity, заполнив поля. При необходимости отправить Kafka event через outbox. Сформировать результат. Вернуть результат клиенту.
Обязательность полей
В таблицах везде указывать Обязательное или Nullable.
Диаграммы
- Mermaid: flowchart (алгоритмы Domain), erDiagram (связи сущностей), sequenceDiagram (саги). Либо PlantUML при необходимости.
- В Mermaid: camelCase для ID узлов, кавычки для подписей со спецсимволами.
Ссылки
Использовать префикс /chessboard/panoramas/ для ссылок внутри документации Panoramas, например: AddPanoramaShootingPointCommand.
Формат для wiki
Каждый документ по методу (API, Domain, Kafka consumer, saga) оформлен как законченная постановка в markdown. При вставке в wiki при необходимости можно обернуть содержимое в блок кода (markdown) для сохранения разметки.
Общее руководство
Руководство по написанию документации — язык, стиль, структура документа, форматирование, именование.