# API 测试链路

本文件记录 `docs/api-test-harness.html` 内置的流程化链路。HTML 只直接执行 HTTP API；腾讯云 IM/TRTC SDK 动作作为客户端步骤列出，不伪造成后端接口。

## 01 三方注册/登录 -> 资料 -> 国家 -> token 生命周期

1. `GET /healthz/ready`：确认 gateway 可接流量。
2. `GET /api/v1/countries`：确认注册页国家主数据可读。
3. `POST /api/v1/auth/third-party/login`：使用真实 Firebase/Google ID token 登录或注册，写入 username/avatar/gender/birth/country/device/source 等注册字段。
4. `GET /api/v1/users/me/identity`：确认 user_id/display_user_id 映射。
5. `GET /api/v1/users/me/overview`：确认我的页聚合数据。
6. `POST /api/v1/users/me/profile/update`：修改用户名、头像、生日。
7. `POST /api/v1/users/me/country/change`：修改国家；同一用户一个月只允许一次，重复执行应返回冲突。
8. `POST /api/v1/auth/password/set`：首次设置密码。
9. `POST /api/v1/auth/token/refresh`：刷新 access token。
10. `POST /api/v1/auth/logout`：失效 refresh session。

## 02 密码登录 -> refresh -> logout

1. `POST /api/v1/auth/account/login`：账号是当前展示短号。
2. `GET /api/v1/users/me/identity`：验证登录态。
3. `POST /api/v1/auth/token/refresh`：验证 refresh 轮换。
4. `POST /api/v1/auth/logout`：验证 session 失效。

## 03 房间 -> IM -> RTC -> MicUp -> 发流确认 -> 下麦离房

1. `POST /api/v1/rooms/create`：创建房间，成功后回填 `room_id`。
2. `POST /api/v1/rooms/join`：加入业务 presence。
3. `GET /api/v1/rooms/current`：确认当前可恢复房间。
4. `GET /api/v1/im/usersig`：获取 IM `sdk_app_id/user_id/user_sig`。
5. 客户端 IM SDK：`TIM.create + login`，房间群 ID 使用 `room_id`。
6. `POST /api/v1/rtc/token`：获取 RTC `sdk_app_id/rtc_user_id/user_sig/str_room_id`。
7. 客户端 TRTC SDK：使用 `str_room_id` 进房。
8. `POST /api/v1/rooms/mic/up`：麦位进入 `pending_publish`，回填 `mic_session_id/room_version`。
9. 客户端 TRTC SDK：`switchRole(anchor) + startLocalAudio`。
10. `POST /api/v1/rooms/mic/publishing/confirm`：带 `mic_session_id/room_version/event_time_ms` 确认发布。
11. `GET /api/v1/rooms/snapshot`：确认麦位进入 `publishing`。
12. `POST /api/v1/rooms/heartbeat`：刷新业务 presence。
13. `POST /api/v1/rooms/mic/down`：下麦。
14. `POST /api/v1/rooms/leave`：离房。

## 04 MicUp 未确认 -> publish_timeout 自动释放验证

1. `POST /api/v1/rooms/create`
2. `POST /api/v1/rooms/join`
3. `POST /api/v1/rtc/token`
4. `POST /api/v1/rooms/mic/up`
5. 不调用 `ConfirmMicPublishing`，等待 `publish_deadline_ms` 或服务配置 deadline。
6. `GET /api/v1/rooms/current`
7. `GET /api/v1/rooms/snapshot`：确认麦位释放或状态转移符合 `publish_timeout`。

## 05 App 消息 tab/inbox 读写链路

1. `GET /api/v1/messages/tabs`
2. `GET /api/v1/messages`
3. `POST /api/v1/messages/{message_id}/read`
4. `POST /api/v1/messages/read-all`
5. `DELETE /api/v1/messages/{message_id}`

## 06 资源/礼物/送礼/币商转账链路

1. `GET /api/v1/resources`
2. `GET /api/v1/resource-groups/{group_id}`
3. `GET /api/v1/gifts`
4. `GET /api/v1/users/me/resources`
5. `POST /api/v1/users/me/resources/{resource_id}/equip`
6. `POST /api/v1/rooms/gift/send`
7. `POST /api/v1/wallet/coin-seller/transfer`

## 07 后台国家/区域配置链路

1. `POST /api/v1/auth/login`
2. `GET /api/v1/auth/me`
3. `GET /api/v1/admin/countries`
4. `POST /api/v1/admin/countries`
5. `POST /api/v1/admin/countries/{country_id}/enable`
6. `GET /api/v1/admin/regions`
7. `POST /api/v1/admin/regions`
8. `PUT /api/v1/admin/regions/{region_id}/countries`
9. `POST /api/v1/admin/regions/{region_id}/enable`

## 08 后台币商库存入账 -> App 币商转账

1. `POST /api/v1/auth/login`
2. `GET /api/v1/admin/coin-sellers`
3. `POST /api/v1/admin/coin-sellers/{user_id}/stock-credits`
4. `POST /api/v1/wallet/coin-seller/transfer`
5. `GET /api/v1/admin/payment/recharge-bills`
