- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре канонические секции, достигнутые звенья строками в «Готово», цели переформулированы возможностями приложения - задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму действия, «Завершение» целей перечнями со ссылкой из каждой задачи - вычитка проходами task-form и doc-wording, починены протухшие факты в README, паспорте и review.md
3.3 KiB
Отдавать тренировки вместе с маршрутом
- Секция: Ядро
- Зачем: Тренировки с маршрутами разобраны и лежат в витрине, а маршрутов чтения нет — сценарий трекера не закрыт
- Теги: goal:read-api, sprint:2026-08-04, kind:feature
Трекер забирает тренировку одним пакетом вместе с маршрутом: GET /workouts за
период и GET /workouts/{id} поштучно.
Разбор и хранение тренировок сделаны (change 2026-08-02-trenirovki-i-zapisi),
маршрутов чтения нет: тренировка с маршрутом лежит в витрине и наружу не отдаётся.
Второй сценарий паспорта — трекер тренировок — до тех пор не закрыт.
Это первый по-настоящему тяжёлый ответ проекта. Маршрут лежит блобом внутри тренировки, и общий предел размера ответа обязан распространяться и на него — иначе одна тренировка с длинным треком проходит мимо потолка, названного для точек. Отсюда же требование к списку: перечень за период не тянет треки, иначе неделя тренировок превращается в один неподъёмный ответ.
Конверт и форма провода наследуются, а не изобретаются.
Двигает строку «Завершения» цели: «Тренировки с маршрутом и записи со своим id отдаются за период».
Затрагивает
Два новых маршрута: GET /api/v1/workouts за период и
GET /api/v1/workouts/{id} поштучно. Публичные типы провода в
internal/httpapi — конверт тренировки и элемент списка. Чтение таблицы
тренировок; схемы и формата на диске не трогает.
Критерии приёмки
- тренировка отдаётся одним пакетом вместе с маршрутом — оракул: запрос к поднятому сервису на живом архиве
- список тренировок за период не тянет треки — оракул: тест, сравнивающий размер ответа списка с размером ответа одной тренировки
- тренировка с длинным треком подчиняется общему пределу размера ответа — оракул: тест на синтетическом треке за пределом
Рамки
Схема не трогается, данные только читаются. Берётся после конверта. Разворачивание маршрута в отдельную таблицу остаётся идеей и здесь не решается.