Skip to content

运动 API

运动接口覆盖运动记录、运动分类、MET、日历、周报、历史、自定义运动和数据一致性检查。所有生产 endpoint 都要求 Bearer JWT。

Endpoint 索引

MethodPath用途
GET/api/sport/met-values读取 MET 数据。
GET/api/sport/exercises读取运动分类。
GET/api/sport/types读取历史筛选使用的运动类型 id。
POST/api/sport/log创建运动记录。
GET/api/sport/logs分页读取运动记录。
GET/api/sport/log/{log_id}读取单条运动记录。
GET/api/sport/active读取当前进行中运动。
PUT/api/sport/log/{log_id}更新运动记录。
DELETE/api/sport/log/{log_id}删除运动记录。
PUT/api/sport/log/{log_id}/feedback提交运动反馈。
GET/api/sport/stats读取运动统计。
GET/api/sport/logs/calendar读取日历聚合数据。
POST/api/sport/sync-calendar日历同步兼容入口。
GET/api/sport/weekly-report读取周报数据。
GET/api/sport/history读取历史记录筛选结果。
POST/api/sport/log/custom添加自定义运动记录。
GET/api/sport/schemes/user/{user_id}读取指定用户运动方案。
GET/api/sport/validate-consistency/{user_id}校验用户运动数据一致性。

Endpoint 契约

运动分类与 MET

GET /api/sport/met-values

内容
Request
Responsemet_data
Errors401500
ConsumerSportApiClient.getMetValues
Handlersport.get_met_values
DB Touchpoints当前从服务内静态运动分类计算,不读 DB
Teststests/services/test_sport_service.py

GET /api/sport/exercises

内容
Requestquery category
Responseexercise_categories
Errors401500
ConsumerSportApiClient.getExerciseCategories
Handlersport.get_exercise_categories
DB Touchpoints当前为服务内静态分类,不读 DB
Teststests/api/test_sport.py

GET /api/sport/types

内容
Request
Responsetypes,值来自运动分类的 category_id
Errors401500
ConsumerExerciseHistoryApiClient 历史筛选
Handlersport.get_exercise_types
DB Touchpoints当前从服务内静态分类计算,不读 DB
Teststests/api/test_sport.pytests/api/test_story_7_4_fixes.py

运动记录

POST /api/sport/log

内容
Requestsport_namesport_startsport_endcaliffinish
Response运动记录公开字段
Errors400 校验失败;409 已有进行中运动;401500
ConsumerSportApiClient.createSportLog
Handlersport.create_sport_log
DB Touchpointssport_logs;读 users;检查 active log
Teststests/api/test_sport.pytests/services/test_sport_service_active_guard.py

GET /api/sport/logs

内容
Requestquery limit 1-100、offset >=0
Responselogstotal、分页字段
Errors401500
ConsumerSportApiClient.getUserSportLogs
Handlersport.get_user_sport_logs
DB Touchpoints读当前用户 sport_logs
Teststests/api/test_sport.py

GET /api/sport/log/{log_id}

内容
Requestpath log_id
Response单条运动记录
Errors403 非本人;404 不存在;401500
ConsumerExerciseHistoryApiClient.getExerciseDetailsFeedbackApiClient.getSportLogWithFeedback
Handlersport.get_sport_log
DB Touchpointssport_logs 并校验归属
Teststests/api/test_sport.py

GET /api/sport/active

内容
Request
Response当前未完成运动记录
Errors404 无进行中运动;401500
ConsumerSportApiClient.getActiveSportLog
Handlersport.get_active_sport_log
DB Touchpointssport_logsiffinish=false 记录
Teststests/api/test_sport.py

PUT /api/sport/log/{log_id}

内容
Requestsport_endcaliffinishsport_feedback
Response更新后记录
Errors403 非本人;404 不存在;401500
ConsumerSportApiClient.updateSportLogExerciseHistoryApiClient.updateExerciseHistory
Handlersport.update_sport_log
DB Touchpoints更新本人 sport_logs
Teststests/api/test_sport.py

DELETE /api/sport/log/{log_id}

内容
Requestpath log_id
Responsemessagelog_id
Errors403 非本人;404 不存在;401500
ConsumerExerciseHistoryApiClient.deleteExerciseHistory
Handlersport.delete_sport_log
DB Touchpoints删除/软删除本人 sport_logs,以 repository 实现为准
Teststests/api/test_sport.py

PUT /api/sport/log/{log_id}/feedback

内容
Requestcompletion_statusfeeling_ratingcustom_notesfinal_calories
Responsemessagelog
Errors403 非本人;404 不存在;401500
ConsumerFeedbackApiClient.submitFeedback
Handlersport.submit_sport_feedback
DB Touchpoints更新 sport_logs.sport_feedbackcaliffinish
Teststests/services/test_sport_service.py、Flutter feedback tests

统计、日历与历史

GET /api/sport/stats

内容
Request
Response用户运动统计
Errors401500
Consumer运动统计入口
Handlersport.get_user_sport_stats
DB Touchpoints聚合读 sport_logs
Teststests/api/test_sport.py

GET /api/sport/logs/calendar

内容
Requeststart_dateend_date
Responsecalendar_datasummary
Errors400 日期范围非法;401500
ConsumerSportApiClient.getCalendarData、CalendarBloc
Handlersport.get_calendar_data
DB Touchpoints按日期范围读 sport_logs
TestsFlutter calendar tests

POST /api/sport/sync-calendar

内容
Request
Responsesynced_count=0duplicate_count=0errors=[]
Errors401
ConsumerSportApiClient.syncCalendarData
Handlersport.sync_calendar
DB Touchpoints不读写 DB;当前没有外部日历源
Teststests/api/test_sport.pytests/api/test_story_7_4_fixes.py

GET /api/sport/weekly-report

内容
Requeststart_dateend_date
Responsereport_data
Errors400 日期范围非法;401500
ConsumerSportApiClient.getWeeklyReport、WeeklyReportBloc
Handlersport.get_weekly_report
DB Touchpointsusersuser_profilessport_logs
Testsweekly report tests;WeeklyReportScreen 代码与路由保留,但当前不作为可达入口

GET /api/sport/history

内容
Request日期、运动类型、exclude_custom、分页
Responserecordstotal_counthas_morenext_offset
Errors400 日期格式;401500
ConsumerExerciseHistoryApiClient.getExerciseHistory
Handlersport.get_exercise_history
DB Touchpoints筛选读 sport_logs
Teststest/api/exercise_history_api_client_test.dart

POST /api/sport/log/custom

内容
Requestquery/form 参数:sport_namesport_startsport_endcal
Response自定义运动记录
Errors400 日期/参数;401500
ConsumerExerciseHistoryApiClient.addCustomExercise
Handlersport.add_custom_exercise
DB Touchpointssport_logs,附加自定义字段响应
Teststest/api/exercise_history_api_client_test.dart

方案与一致性

GET /api/sport/schemes/user/{user_id}

内容
Requestpath user_id、分页
Responseschemes、分页字段
Errors403 访问他人;401500
Consumer运动方案调试/校验入口
Handlersport.get_user_schemes
DB Touchpointssport_schemes
Teststests/api/test_sport.py

GET /api/sport/validate-consistency/{user_id}

内容
Requestpath user_id
Responsechecksissuesstatus
Errors403 访问他人;401500
Consumer数据一致性校验入口
Handlersport.validate_user_data_consistency
DB Touchpointsuserssport_logssport_schemes
Testssource inspection

运动记录请求字段

FieldTypeRequiredDescription
sport_namestringyes运动名称。
sport_startdatetimeyes开始时间。
sport_enddatetimeno结束时间。
calintegeryes热量。
iffinishbooleanyes是否完成;false 会触发 active log 互斥检查。
sport_feedbackstringno运动反馈,可为结构化 JSON 字符串。
notes / exercise_type / is_custommixedno自定义运动与历史筛选辅助字段。

接口边界

接口当前状态文档口径
POST /api/sport/sync-calendar生产 route 存在兼容 Flutter 日历同步动作;当前无外部同步源,因此返回 0 同步结果。
GET /api/sport/types生产 route 存在面向历史筛选返回运动分类 id,来源与 /api/sport/exercises 的静态分类一致。
GET /api/sport/weekly-report后端存在,Flutter client 存在WeeklyReportScreen 代码与路由保留,但当前不作为可达入口。

来源锚点

  • Router: apps/backend_service/app/api/sport.py
  • Service: apps/backend_service/app/services/sport_service.py
  • Repository: apps/backend_service/app/repositories/sport_log_repository.py
  • Flutter: apps/flutter_app/lib/api/sport_api_client.dartfeedback_api_client.dartexercise_history_api_client.dart
  • Tests: apps/backend_service/tests/api/test_sport.pyapps/flutter_app/test/api/exercise_history_api_client_test.dart