# 第七阶段：学生端体验与内容消费闭环

状态：已完成。

## 目标

- 补齐学生端视频消费、Profile 签到、积分流水和内容导入异步化。
- 不实现 AI 业务功能；AI 进入第八阶段。

## 结果

学生端视频接口：

- `GET /api/videos/search`
- `POST /api/videos/play`
- `POST /api/videos/progress`
- `GET /api/questions/videos`
- `POST /api/questions/videos/batch`

Profile 与积分接口：

- `POST /api/profile/check-in`
- `GET /api/profile/score-events`

内容导入入口：

- `POST /api/tenant-content/imports/preview/{importType}`
- `POST /api/tenant-content/imports/{importType}`
- `GET /api/tenant-content/imports/detail`

## 边界

- 播放接口不暴露 OSS bucket、真实 object key 或 provider 细节。
- 公共题和租户私题关联视频都必须按当前租户可见性校验。
- 播放进度按租户、用户、视频、题目维度幂等更新。
- 签到复用积分任务和积分流水；同一用户、同一租户、同一天只能成功一次。
- `questions`、`vocabulary`、`handbook`、`scoreline`、`videos` 导入语义统一映射为 `importType`。
- 大批量导入创建 `content_import` 后台任务，Worker 使用 `ITenantExecutionScope` 执行。
- 本阶段未实现 `/api/ai/**`。SK 包和 AI provider 边界在第八阶段引入。

## 旧接口替代

- `/api/profile/activity-tasks` -> `/api/points/tasks`
- `/api/profile/exchange-items` -> `/api/points/exchange-items`
- `/api/profile/exchange-items/redeem` -> `/api/points/exchange-orders`

## 验收

- 租户 A 不能播放租户 B 视频。
- 公共题和租户私题解析视频都按权限返回。
- 播放进度重复上报不产生重复记录。
- 每日签到同一天只能成功一次。
- 签到、积分任务和兑换产生可查询积分流水。
- 异步导入创建 `content_import` job，Worker 成功写入结果。
