Files
healthlog/docs/tasks/items/read-api-workouts-and-records.md
T
av 79331ac670 tasks: закрыт разбор и хранилище, начат спринт по чтению данных клиентами
- цель parsing-and-storage закрыта по своему критерию; незакрываемый остаток
  (новые формы от источника, ручные секции задним числом) переехал в тему
  parsing-completeness
- цель mcp поглощена целью read-api, переименованной в «Чтение данных
  клиентами»: адаптер — последний шаг того же направления, а не своё
- read-api-points разложена на конверт с точками, свёртку по сетке и
  тренировки с записями; спринт 2026-08-04 набран пятью задачами
2026-08-04 14:01:38 +03:00

3.4 KiB

Тренировки и записи наружу

  • Секция: ядро
  • Зачем: Тренировки с маршрутами и stateOfMind разобраны и лежат в витрине, а эндпоинтов нет — второй сценарий паспорта не закрыт
  • Теги: goal:read-api

Трекер тренировок забирает тренировку одним пакетом вместе с маршрутом, а записи stateOfMind достаются за период — без доступа к файлу базы.

Третья из трёх частей read-api-points. Разбор и хранение сущностей с собственным id сделаны (change 2026-08-02-trenirovki-i-zapisi), эндпоинтов нет: данные лежат в витрине и наружу не отдаются. Второй сценарий паспорта до тех пор не закрыт.

Маршруты: GET /workouts, GET /workouts/{id}, GET /records/{kind}.

Конверт не изобретается заново — наследуется от конверта ответа вместе с формой провода и условным запросом. Вводить эти маршруты раньше конверта значило бы задать контракт мимоходом; именно поэтому они здесь, а не в задаче о разборе.

Маршрут — первый по-настоящему тяжёлый ответ проекта. Он лежит блобом внутри тренировки, и правило размера ответа (свёртка по сетке) обязано распространяться и на него — иначе одна тренировка с длинным треком проходит мимо предела, названного для точек. Разворачивание маршрута в отдельную таблицу остаётся идеей и этой задачей не решается.

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

  • тренировка отдаётся одним пакетом вместе с маршрутом — оракул: запрос к поднятому сервису на живом архиве
  • записи stateOfMind за период достаются GET /records/{kind} — оракул: тест на пакетах internal/hae/testdata
  • конверт, форма провода и условный запрос те же, что у точек, а не собственные — оракул: тест, сравнивающий форму ответа обоих маршрутов
  • тренировка с длинным маршрутом подчиняется тому же пределу размера ответа, что и точки — оракул: тест на синтетическом треке за пределом

Рамки

Схема не трогается, данные только читаются, сервис перезапускается. Берётся после конверта ответа. Против ./data — только task up / task run.

Связано: docs/architecture.md → «Read API»; идея разворачивания маршрутов в таблицу.