Расширение API и модели данных для детальных результатов тренировок #11

Open
opened 2026-06-27 11:11:06 +00:00 by Grigo · 0 comments
Owner

Тип: feature

Добавить в модель workout_log и API возможность сохранения и получения расширенных метрик тренировок (дистанция, пульс, темп, каденс, нагрузка, эффекты, VO2max, восстановление, интервалы, зоны пульса, субъективная оценка). Также отображать ключевые метрики в сводке дня и истории тренировок.

Acceptance criteria

  • Модель workout_log содержит поля: distance_m, avg_heart_rate, max_heart_rate, avg_pace, avg_cadence, max_cadence, avg_stride_length_cm, training_load, aerobic_effect, anaerobic_effect, vo2max, recovery_hours, intervals_json, heart_rate_zones_json, perceived_effort
  • POST /api/fitness/workout/{id}/results сохраняет расширенные результаты тренировки и возвращает обновлённую запись
  • GET /api/fitness/workout/{id}/results возвращает сохранённые результаты тренировки
  • GET /api/fitness/summary в ответе содержит общую дистанцию, средний пульс и тренировочную нагрузку за день
  • GET /api/fitness/history содержит колонки distance_m, avg_heart_rate, training_load
  • Поля intervals_json и heart_rate_zones_json валидируются как корректный JSON
  • Поле perceived_effort принимает значения от 1 до 5

Исходное описание

Сейчас фитнес-трекер уже умеет записывать тренировки через log_workout (название, длительность, ккал, шаги), но нет полноценной фиксации результатов тренировки. Нужно расширить API и модель данных, чтобы можно было сохранять детальные результаты пробежек и других тренировок.

Что нужно:

  1. Расширить модель workout_log: добавить поля distance_m (дистанция в метрах), avg_heart_rate (средний пульс), max_heart_rate (макс пульс), avg_pace (средний темп, например в секундах на км), avg_cadence (средний каденс), max_cadence (макс каденс), avg_stride_length_cm (средняя длина шага), training_load (тренировочная нагрузка TL), aerobic_effect (аэробный эффект), anaerobic_effect (анаэробный эффект), vo2max (МПК в мл/кг/мин), recovery_hours (время восстановления в часах), intervals_json (JSON с интервалами: тип, длительность, дистанция, темп), heart_rate_zones_json (JSON с зонами пульса: название зоны и время в ней), perceived_effort (субъективная оценка: 1-5).

  2. Добавить API эндпоинт POST /api/fitness/workout/{id}/results для сохранения результатов тренировки (можно вызывать отдельно от log_workout, или расширить log_workout).

  3. Добавить API эндпоинт GET /api/fitness/workout/{id}/results для получения сохранённых результатов.

  4. В сводке дня (get_fitness_summary) показывать ключевые метрики тренировок: общая дистанция, средний пульс, тренировочная нагрузка.

  5. В истории (get_fitness_history) добавить колонки: дистанция, средний пульс, TL.

Использование: пользователь после пробежки смотрит данные в Mi Fitness и скидывает скриншоты ассистенту, тот парсит и сохраняет через новый API.


Taiga: #52https://taiga.grigowashere.ru/project/0/9/us/52
Ветка: feature/52-расширение-api-и-модели-данных-для-детал

Закрытие: Closes gitea #N, taiga #REF в коммите

**Тип:** feature Добавить в модель workout_log и API возможность сохранения и получения расширенных метрик тренировок (дистанция, пульс, темп, каденс, нагрузка, эффекты, VO2max, восстановление, интервалы, зоны пульса, субъективная оценка). Также отображать ключевые метрики в сводке дня и истории тренировок. ## Acceptance criteria - Модель workout_log содержит поля: distance_m, avg_heart_rate, max_heart_rate, avg_pace, avg_cadence, max_cadence, avg_stride_length_cm, training_load, aerobic_effect, anaerobic_effect, vo2max, recovery_hours, intervals_json, heart_rate_zones_json, perceived_effort - POST /api/fitness/workout/{id}/results сохраняет расширенные результаты тренировки и возвращает обновлённую запись - GET /api/fitness/workout/{id}/results возвращает сохранённые результаты тренировки - GET /api/fitness/summary в ответе содержит общую дистанцию, средний пульс и тренировочную нагрузку за день - GET /api/fitness/history содержит колонки distance_m, avg_heart_rate, training_load - Поля intervals_json и heart_rate_zones_json валидируются как корректный JSON - Поле perceived_effort принимает значения от 1 до 5 ## Исходное описание Сейчас фитнес-трекер уже умеет записывать тренировки через log_workout (название, длительность, ккал, шаги), но нет полноценной фиксации результатов тренировки. Нужно расширить API и модель данных, чтобы можно было сохранять детальные результаты пробежек и других тренировок. Что нужно: 1. Расширить модель workout_log: добавить поля distance_m (дистанция в метрах), avg_heart_rate (средний пульс), max_heart_rate (макс пульс), avg_pace (средний темп, например в секундах на км), avg_cadence (средний каденс), max_cadence (макс каденс), avg_stride_length_cm (средняя длина шага), training_load (тренировочная нагрузка TL), aerobic_effect (аэробный эффект), anaerobic_effect (анаэробный эффект), vo2max (МПК в мл/кг/мин), recovery_hours (время восстановления в часах), intervals_json (JSON с интервалами: тип, длительность, дистанция, темп), heart_rate_zones_json (JSON с зонами пульса: название зоны и время в ней), perceived_effort (субъективная оценка: 1-5). 2. Добавить API эндпоинт POST /api/fitness/workout/{id}/results для сохранения результатов тренировки (можно вызывать отдельно от log_workout, или расширить log_workout). 3. Добавить API эндпоинт GET /api/fitness/workout/{id}/results для получения сохранённых результатов. 4. В сводке дня (get_fitness_summary) показывать ключевые метрики тренировок: общая дистанция, средний пульс, тренировочная нагрузка. 5. В истории (get_fitness_history) добавить колонки: дистанция, средний пульс, TL. Использование: пользователь после пробежки смотрит данные в Mi Fitness и скидывает скриншоты ассистенту, тот парсит и сохраняет через новый API. --- **Taiga:** #52 — https://taiga.grigowashere.ru/project/0/9/us/52 **Ветка:** `feature/52-расширение-api-и-модели-данных-для-детал` Закрытие: `Closes gitea #N, taiga #REF` в коммите
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Grigo/Home_assistant#11