Skip to content

陪伴 API

陪伴接口维护虚拟陪伴状态、情绪、外观配置,并提供健康总览聚合数据。生产接口都要求 Bearer JWT;debug route 只在 DEVELOPMENT_MODE=true 时注册。

Endpoint 索引

MethodPath用途
GET/api/companion/status读取虚拟陪伴状态。
PUT/api/companion/update-emotion按健康分数更新情绪。
POST/api/companion/initialize初始化虚拟陪伴。
PUT/api/companion/appearance更新外观配置。
POST/api/companion/auto-configure-appearance按用户资料自动配置外观。
GET/api/companion/health-overview读取健康总览聚合数据。
GET/api/companion/status-history读取陪伴状态兼容快照。

Endpoint 契约

GET /api/companion/status

内容
Request
Responsecompanion status
Errors401404 未初始化且无法自动创建;500
Consumer后端生产接口;当前 Flutter client 主要误调 debug /test
Handlercompanion.get_companion_status
DB Touchpoints读/可能创建 virtual_companion;读 user_profiles
Teststests/api/test_story_7_4_fixes.py

PUT /api/companion/update-emotion

内容
Requesthealth_score 0-100、trigger_reason
Response更新后的 companion status
Errors401404422500
ConsumerCompanionApiClient.updateCompanionEmotion
Handlercompanion.update_companion_emotion
DB Touchpoints更新 virtual_companion
Testsservice tests / source inspection

POST /api/companion/initialize

内容
Requestuser_genderuser_ageinitial_health_score
Responsecompanion status
Errors401422500
ConsumerCompanionApiClient.initializeCompanion
Handlercompanion.initialize_companion
DB Touchpoints写或读 virtual_companion
Testssource inspection

PUT /api/companion/appearance

内容
Request外观配置字段
Responsecompanion status
Errors400 无更新字段;401404422500
ConsumerCompanionApiClient.updateCompanionAppearance
Handlercompanion.update_companion_appearance
DB Touchpoints更新 virtual_companion.appearance_config
Testssource inspection

POST /api/companion/auto-configure-appearance

内容
Request
Responsecompanion status
Errors401404 companion 或 profile 缺失;500
ConsumerCompanionApiClient.autoConfigureCompanionAppearance
Handlercompanion.auto_configure_companion_appearance
DB Touchpointsuser_profiles;更新 virtual_companion
Testssource inspection

GET /api/companion/health-overview

内容
Request
Responseuser profile、health metrics、exercise statistics、trend、companion status、recommendations
Errors401500
ConsumerCompanionApiClient.getHealthOverview、HealthOverviewBloc
Handlercompanion.get_health_overview -> GetHealthOverviewUseCase
DB Touchpointsusersuser_profilesuser_diseasessport_logsvirtual_companion
Teststests/use_cases/test_get_health_overview_use_case.py、Flutter health overview tests;HealthOverviewScreen 代码与路由保留,但当前不作为可达入口

GET /api/companion/status-history

内容
Requestquery days,范围 1-365,默认 30
Response当前 companion status 快照数组;未初始化时返回空数组
Errors401422500
ConsumerCompanionApiClient.getCompanionStatusHistory
Handlercompanion.get_companion_status_history
DB Touchpointsvirtual_companion 当前状态
Teststests/api/test_companion_debug_route_guards.pytests/api/test_story_7_4_fixes.py

Debug route

MethodPath注册条件说明
GET/api/companion/health-overview-testDEVELOPMENT_MODE=true无鉴权调试健康总览,包含固定测试 user id;生产不注册。
GET/api/companion/testDEVELOPMENT_MODE=true无鉴权 companion mock status;生产不注册。

前后端契约差异

Flutter 调用后端当前状态处理方式
GET /api/companion/test只在开发模式注册不能作为生产获取状态接口;生产应使用 /api/companion/status
GET /api/companion/status-history?days=...生产 route 存在返回当前状态快照,不代表独立历史流水表。
GET /api/companion/health-overview后端存在,Flutter client 存在HealthOverviewScreen 代码与路由保留,但当前不作为可达入口。

Response 结构

Companion status 典型字段:

json
{
  "companion_id": "<id>",
  "gender": "female",
  "age_group": "young",
  "current_emotion": "happy",
  "health_score": 75,
  "current_state": "female_young_happy",
  "state_config": {},
  "appearance_config": {},
  "position_config": {},
  "last_updated": "2026-05-08T10:00:00Z"
}

来源锚点

  • Router: apps/backend_service/app/api/companion.py
  • Service: apps/backend_service/app/services/companion_service.py
  • Use case: apps/backend_service/app/use_cases/companion/get_health_overview.py
  • Flutter: apps/flutter_app/lib/api/companion_api_client.dart
  • Tests: apps/backend_service/tests/api/test_companion_debug_route_guards.pyapps/backend_service/tests/use_cases/test_get_health_overview_use_case.py