Files
healthlog/docs/tasks/items/read-api-workouts.md
T
av 3d24248075 docs: документация приведена к канону av-dev-pm 4
- каждая запись каталога задач получила тип вместо тега kind: и префикса
  заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок
  секций канонический
- поправлены протухшие факты: нереализованные маршруты Read API, MCP и
  `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию
  диффа, периметр перестал дублировать security.md
- замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек
  storage и parsing
2026-08-05 19:09:35 +03:00

3.3 KiB

Отдавать тренировки вместе с маршрутом

  • Тип: 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 — конверт тренировки и элемент списка. Чтение таблицы тренировок; схемы и формата на диске не трогает.

Критерии приёмки

  • тренировка отдаётся одним пакетом вместе с маршрутом — оракул: запрос к поднятому сервису на живом архиве
  • список тренировок за период не тянет треки — оракул: тест, сравнивающий размер ответа списка с размером ответа одной тренировки
  • тренировка с длинным треком подчиняется общему пределу размера ответа — оракул: тест на синтетическом треке за пределом

Рамки

Схема не трогается, данные только читаются. Берётся после конверта. Разворачивание маршрута в отдельную таблицу остаётся идеей и здесь не решается.