- конверт и точки разложены на форму провода, точки за период и условный запрос; свёртка — на сетку, порог неполного ведра и предел размера ответа; тренировки и записи разъехались на два независимых маршрута - openapi-swagger разложена на спеку, гейт против расхождения и Swagger UI — все три вне набора, вместе с mcp-server - набор спринта 2026-08-04 — весь HTTP-слой чтения, восемь задач
39 lines
3.2 KiB
Markdown
39 lines
3.2 KiB
Markdown
# Форма провода маршрутов чтения
|
||
|
||
- **Секция:** ядро
|
||
- **Зачем:** Переименование поля в internal/catalog меняет публичный контракт без касания httpapi, и держит это один байтовый тест
|
||
- **Теги:** goal:read-api, sprint:2026-08-04
|
||
|
||
Публичный контракт чтения перестаёт меняться от переименования поля в домене —
|
||
либо потому, что доменные типы объявлены формой провода намеренно, либо потому,
|
||
что между ними и транспортом появился DTO.
|
||
|
||
Сегодня типы `internal/catalog` сами несут json-теги, а `internal/httpapi/catalog.go`
|
||
(66 строк) владеет только обёрткой: переименование поля в домене меняет
|
||
публичный контракт без касания транспорта, и держит это один байтовый тест
|
||
непустого ответа. Пока маршрут чтения был один и без потребителей, цена была
|
||
нулевой; со следующей задачи образец копируют точки, тренировки, записи и MCP.
|
||
|
||
Мерджится первой из всей цели и трогает только уже живой каталог. Решение
|
||
принимается **до** того, как его скопируют, — потом это будет не решение, а
|
||
археология. Развилка не изобретается с нуля: как разделять доменные типы и форму
|
||
провода, решено во множестве чужих проектов, и правило проекта требует начать с
|
||
их разбора.
|
||
|
||
## Критерии приёмки
|
||
|
||
- решение записано в `docs/architecture.md` с названной ценой обеих сторон, а не
|
||
только выбранной — оракул: глазами по разделу
|
||
- переименование поля доменного типа либо не меняет байты ответа, либо меняет их
|
||
намеренно, и тест утверждает это прямо, а не проверяет непустоту — оракул:
|
||
тест на переименование
|
||
- маршрут каталога приведён к решению, и следующий маршрут копирует образец, а
|
||
не выбирает заново — оракул: гейт зелёный плюс сверка `httpapi/catalog.go` с
|
||
записанным решением
|
||
|
||
## Рамки
|
||
|
||
Трогается только каталог и его транспорт, схема не трогается. Публичный контракт
|
||
каталога при этом может измениться — потребителей у него сегодня нет, и это
|
||
единственный момент, когда такая правка бесплатна.
|