You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
/api/v1/training-tasks 原先只表示"哪些步骤完成了",且模块二、四、五的动作链、
模块三的各接口都不会写入,导致步骤做完了进度不更新。同时新需求要求学员操作过程中
可以随时保存答案。
接口
- PUT /training-tasks/{moduleCode}/steps/{stepCode} 保存答案(JSON),覆盖上一次
- GET /training-tasks/{moduleCode}/steps/{stepCode} 读取答案和步骤状态
- DELETE /training-tasks/{moduleCode} 重新实训,清空模块进度
- 步骤新增状态 SAVED(已保存草稿未完成);模块/步骤新增 savedSteps、hasData、savedAt、locked
- 非法输入(空、非 JSON、非对象/数组、超 10 万字符、未知模块/步骤)一律 400
防止学员改答案
- 步骤完成之前答案可反复覆盖;完成之后只再接受一次保存(页面做完最后一个动作会自动存一次),
随即锁定。锁定后提交不同内容返回 409(新增 ErrorCode.CONFLICT),原答案保留;
相同内容(忽略空白和键顺序)视为成功。重新实训清空整个模块,包括锁定状态
- 保存时对该步骤行加锁,避免并发请求绕过锁定检查
进度写入
- 模块一、二、四、五的评分服务在步骤完成时统一同步进度;模块三在拦截器里按
前端各步完成判据对应到最后一个写接口,并恢复为 5 步可用
- 去掉拦截器里"仅打开页面的读接口也记步骤完成"的三处映射(兑换/支付 context、发行库存),
否则步骤一进入就被当成已完成,答案会被提前锁定
- 草稿不计入完成数:module-completion 只统计 completed_at 不为空的记录
数据库(必须先于后端部署,按顺序执行,均可重复执行)
1. db/manual/training_task_progress_draft_upgrade.sql 新增 step_data/saved_at/sealed_at,completed_at 改为可空
2. db/manual/training_task_progress_draft_migrate.sql 把旧 user_step_progress_new 的答案迁入
3. db/manual/training_task_progress_backfill.sql 补录历史漏记的完成记录,并封存已完成且有答案的步骤
第 3 个脚本会锁定存量答案,建议在没有学员正在操作时执行
测试
- 新增服务层 22、接口层 6、拦截器 5、评分服务若干用例;锁定与进度同步的用例已验证
在去掉实现后会失败
- 完整套件的 29 个失败(institutionidentity 三个类和 WalletRuntimeResetTest)在改动前的
master 上同样存在,与本次无关
|
4 days ago | |
|---|---|---|
| .. | ||
| main | 4 days ago | |
| test | 4 days ago | |