forked from wangziqi/gongxue-base
feat: add mock exam reports
This commit is contained in:
@@ -137,6 +137,7 @@ tenant:<tenantId>:theme
|
||||
| 题目列表 | `/api/catalog/question-collections`、`/api/catalog/question-collections/questions` |
|
||||
| 开始练习 | `POST /api/learning/practice-sessions` |
|
||||
| 提交答案 | `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` |
|
||||
| 收藏夹 | `GET/POST /api/learning/favorites/questions` |
|
||||
| 题目视频 | `GET /api/questions/{questionId}/videos`、`POST /api/questions/videos/batch`、`POST /api/videos/play` |
|
||||
@@ -197,6 +198,70 @@ tenant:<tenantId>:theme
|
||||
- `PRACTICE_SESSION_QUESTION_FORBIDDEN`:说明提交答案的题目不在本次 session 快照内,应清理本地异常进度并重新开始。
|
||||
- 提交答案必须传 `practiceSessionId`;后端会拒绝不属于本人有效 session 的题目。
|
||||
|
||||
### 模考交卷与报告
|
||||
|
||||
全真模拟、试卷模式、顺序练习的最终报告都走后端交卷接口。前端不得传分数、正确数或题目范围;后端只信任 `practice_sessions.question_ids` 快照和 `answer_records` 最新答题记录。
|
||||
|
||||
交卷请求:
|
||||
|
||||
```json
|
||||
{
|
||||
"practiceSessionId": "00000000-0000-0000-0000-000000000000"
|
||||
}
|
||||
```
|
||||
|
||||
响应关键字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"item": {
|
||||
"id": "...",
|
||||
"practiceSessionId": "...",
|
||||
"mode": "mock_exam",
|
||||
"totalQuestions": 3,
|
||||
"answeredCount": 2,
|
||||
"correctCount": 1,
|
||||
"wrongCount": 1,
|
||||
"unansweredCount": 1,
|
||||
"score": 2,
|
||||
"totalScore": 100,
|
||||
"accuracy": 0.3333,
|
||||
"sectionStats": [
|
||||
{
|
||||
"key": "choice",
|
||||
"title": "单选题",
|
||||
"questionCount": 3,
|
||||
"correctCount": 1,
|
||||
"score": 2,
|
||||
"totalScore": 6
|
||||
}
|
||||
],
|
||||
"wrongQuestionIds": ["..."],
|
||||
"questionResults": [
|
||||
{
|
||||
"questionId": "...",
|
||||
"sectionKey": "choice",
|
||||
"answered": true,
|
||||
"isCorrect": false,
|
||||
"score": 0,
|
||||
"totalScore": 2,
|
||||
"selectedOptions": ["0"],
|
||||
"correctOptionIndices": [1],
|
||||
"explanation": "..."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
前端处理规则:
|
||||
|
||||
- 重复交卷是幂等的,后端会返回同一份报告。
|
||||
- 报告页刷新时调用 `GET /api/learning/practice-sessions/report?practiceSessionId=...`。
|
||||
- 个人中心/模考历史调用 `GET /api/learning/practice-reports?mode=mock_exam&limit=20`,也可以传 `blueprintId` 筛选某套模拟卷。
|
||||
- `score` 是逐题得分合计;`totalScore` 保留后台配置的卷面总分。测试或预发数据题量不足时,两者不一定按百分制等比换算,前端展示时不要自行重算。
|
||||
- 错题复盘优先使用 `wrongQuestionIds` 和 `questionResults`,题目详情仍可按现有题目接口或 session 快照加载。
|
||||
|
||||
## 视频播放契约
|
||||
|
||||
题目视频分为 `free`、`svip`、`video_quota` 三种访问模式。列表接口只用于展示标题、封面、时长、访问模式和试看秒数;除免费公开视频外,列表和搜索接口不会返回可播放 URL。
|
||||
|
||||
Reference in New Issue
Block a user