- каждая запись каталога задач получила тип вместо тега kind: и префикса заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок секций канонический - поправлены протухшие факты: нереализованные маршруты Read API, MCP и `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию диффа, периметр перестал дублировать security.md - замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек storage и parsing
46 lines
3.3 KiB
Markdown
46 lines
3.3 KiB
Markdown
# ✨ Отдавать тренировки вместе с маршрутом
|
|
|
|
- **Тип:** feature
|
|
- **Категория:** Ядро
|
|
- **Зачем:** Тренировки с маршрутами разобраны и лежат в витрине, а маршрутов чтения нет — сценарий трекера не закрыт
|
|
- **Теги:** goal:read-api, sprint:2026-08-04
|
|
|
|
Трекер забирает тренировку одним пакетом вместе с маршрутом: `GET /workouts` за
|
|
период и `GET /workouts/{id}` поштучно.
|
|
|
|
Разбор и хранение тренировок сделаны (change `2026-08-02-trenirovki-i-zapisi`),
|
|
маршрутов чтения нет: тренировка с маршрутом лежит в витрине и наружу не отдаётся.
|
|
Второй сценарий паспорта — трекер тренировок — до тех пор не закрыт.
|
|
|
|
**Это первый по-настоящему тяжёлый ответ проекта.** Маршрут лежит блобом внутри
|
|
тренировки, и общий предел размера ответа обязан распространяться и на него —
|
|
иначе одна тренировка с длинным треком проходит мимо потолка, названного для
|
|
точек. Отсюда же требование к списку: перечень за период не тянет треки, иначе
|
|
неделя тренировок превращается в один неподъёмный ответ.
|
|
|
|
Конверт и форма провода наследуются, а не изобретаются.
|
|
|
|
Двигает строку «Завершения» цели: «Тренировки с маршрутом и записи со своим `id` отдаются за период».
|
|
|
|
## Затрагивает
|
|
|
|
Два новых маршрута: `GET /api/v1/workouts` за период и
|
|
`GET /api/v1/workouts/{id}` поштучно. Публичные типы провода в
|
|
`internal/httpapi` — конверт тренировки и элемент списка. Чтение таблицы
|
|
тренировок; схемы и формата на диске не трогает.
|
|
|
|
## Критерии приёмки
|
|
|
|
- тренировка отдаётся одним пакетом вместе с маршрутом — оракул: запрос к
|
|
поднятому сервису на живом архиве
|
|
- список тренировок за период не тянет треки — оракул: тест, сравнивающий размер
|
|
ответа списка с размером ответа одной тренировки
|
|
- тренировка с длинным треком подчиняется общему пределу размера ответа —
|
|
оракул: тест на синтетическом треке за пределом
|
|
|
|
## Рамки
|
|
|
|
Схема не трогается, данные только читаются. Берётся после конверта.
|
|
Разворачивание маршрута в отдельную таблицу остаётся
|
|
[идеей](workout-routes-table.md) и здесь не решается.
|