forked from wangziqi/gongxue-base
feat: add practice session resume
This commit is contained in:
@@ -153,6 +153,7 @@ tenant:<tenantId>:theme
|
||||
| 分类树 | `/api/catalog/content-nodes?entryId=...&parentId=root` |
|
||||
| 题目列表 | `/api/catalog/question-collections`、`/api/catalog/question-collections/questions` |
|
||||
| 开始练习 | `POST /api/learning/practice-sessions` |
|
||||
| 恢复练习 | `GET /api/learning/practice-sessions/detail?practiceSessionId=...` |
|
||||
| 提交答案 | `POST /api/learning/answers` |
|
||||
| 交卷/报告 | `POST /api/learning/practice-sessions/submit`、`GET /api/learning/practice-sessions/report`、`GET /api/learning/practice-reports` |
|
||||
| 错题本 | `GET /api/learning/wrong-questions`、`POST /api/learning/wrong-questions/resolve` |
|
||||
@@ -232,6 +233,44 @@ tenant:<tenantId>:theme
|
||||
- `PRACTICE_SESSION_QUESTION_FORBIDDEN`:说明提交答案的题目不在本次 session 快照内,应清理本地异常进度并重新开始。
|
||||
- 提交答案必须传 `practiceSessionId`;后端会拒绝不属于本人有效 session 的题目。
|
||||
|
||||
### 断点续练
|
||||
|
||||
Taro 可以缓存当前题号和答题卡用于刷新恢复体验,但跨设备、清缓存、小程序重启后的权威恢复必须调用:
|
||||
|
||||
```text
|
||||
GET /api/learning/practice-sessions/detail?practiceSessionId=<sessionId>
|
||||
```
|
||||
|
||||
响应会返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"item": {
|
||||
"id": "...",
|
||||
"status": "active",
|
||||
"questionIds": ["..."],
|
||||
"questions": [],
|
||||
"answersByQuestion": {
|
||||
"<questionId>": {
|
||||
"selectedOptions": ["1"],
|
||||
"answerText": null,
|
||||
"isCorrect": true,
|
||||
"answeredAt": "..."
|
||||
}
|
||||
},
|
||||
"expiresAt": "..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
前端处理规则:
|
||||
|
||||
- 继续练习入口优先从 `GET /api/learning/practice-sessions/history?status=active` 获取未完成 session,再带 `practiceSessionId` 进入练习页。
|
||||
- 练习页如果 URL 有 `practiceSessionId`,先调用 detail 恢复后端题目快照和最新答案,不要新建 session。
|
||||
- `answersByQuestion` 是同一题的最新答题记录,答题卡、正确/错误统计和解析展示以它为准。
|
||||
- 倒计时以 `expiresAt` 计算剩余时间;不要用本地启动时间重新生成考试时长。
|
||||
- detail 只返回当前用户自己的 session;跨用户或跨租户读取会返回 `PRACTICE_SESSION_NOT_FOUND`。
|
||||
|
||||
## 提交答案契约
|
||||
|
||||
客观题、主观题都统一调用:
|
||||
|
||||
Reference in New Issue
Block a user