Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

4.9 KiB

后端增量 Code Review

日期:2026-09-05。仓库:unreal_tran_api;基线:3307c23 → b683bb7,57 个文件。审查开始时后端工作树干净;审查完成后按用户授权提交为 53d860b

资料 → 原型 → 设计 → 开发 → 测试

资料和原型追溯见同目录 reference-review.md。本轮沿用既有“三渠道共享训练定义、失败可以重试、全过程留痕”的设计,未扩展评分、提前提交或渠道分类。

后端对照以下正式设计审查:wiki/19-训练定义渠道合同.mdwiki/20-教学命令幂等.mdwiki/21-教学步骤运行事实.md,并交叉核对 wiki/14-教学实施模块.md、接口总览、033/034 增量和完整 DDL。审查覆盖多渠道发布预检与固定快照、教员内容写权限、三个登录身份、四类命令回执、逐步推进/失败/重试/提交门槛、历史无事实兼容、正式考核和学员访问隔离。

已修复:旧尝试的迟到证据错误完成重试

严重度:P2。位置:TeachingStepRunService.validateEvidenceTime

重现顺序:步骤首次开始时间为 100,失败时间为 110,重新开始时间为 120;重试后补报发生于 115 的成功事件。旧实现只与首次 startedAt 和最近 failedAt 比较,因此把重试开始前的证据计入第二次尝试,错误将步骤变为 COMPLETED。同类迟到失败事件也可错误增加当前尝试失败次数。

先添加回归用例并在旧实现运行,测试失败,错误为“预期抛出 BusinessException,但没有抛出”。证据:backend-repro.log

修复使用已有 last_event_id 指向的重试激活事件,比较其发生时间;旧尝试的 MATCHED/UNMATCHED 返回 HTTP 400。首次开始时间仍保留,同秒或重试之后的有效事件仍可推进。缺失或跨运行的激活证据拒绝处理。没有新增字段、接口或训练步骤,也没有回填历史事实。

新增测试同时验证迟到成功、迟到失败都不改变当前状态/尝试数/失败数/最近证据;重试同秒的有效成功可以完成,并保留首次开始时间。另更新四个服务测试中的依赖装配,并同步 wiki 01/14/21。

其他审查结论

  • 多渠道配置由发布预检验证全部启用渠道;任务按渠道固化选中的 profile,运行读取固定快照。未发现需要改变产品行为的问题。
  • 内容写操作增加有效教员身份检查,并保留页面权限、动作权限和数据范围校验;纯管理员身份不能绕过教员要求。
  • 命令回执在运行锁内检查,同载荷回放先于旧版本校验;首次执行的运行、事件、步骤和回执共享事务。模拟服务回归覆盖重放与冲突;真实并发和回滚以主 E2E/数据库报告为准。
  • 新运行按发布步骤初始化,最后一步目标进度为 100%;历史无步骤行仅兼容读取/旧提交,不在 GET 中补写。
  • 学员越权、正式考核当前步骤投影、未完成提交、撤回时不删除执行事实均有现有测试覆盖。
  • 主审查在隔离 KingBase schema 发现 034 的独立唯一索引不能作为该目标版本的组合外键目标,由主审查负责新增 035 和完整 DDL 向前修复;数据库执行、恢复点与复跑证据由主报告记录。本后端子任务未连接或执行数据库。

实际验证

环境为 Temurin Java 17.0.20、Maven 3.9.14。

验证 结果 证据
修改前 mvn test -B -ntp 401 项通过:Gateway 1、Auth 86、Tran 314 Maven 退出码 0,完成时间 11:19:45
新增回归用例运行于旧实现 1 项失败,成功复现缺陷 backend-repro.log
四个相关服务类定向测试 23 项通过 backend-targeted.log
修改后全量 mvn test -B -ntp 402 项通过:Gateway 1、Auth 86、Tran 315;0 失败、0 错误、0 跳过 backend-mvn-test.log,11:24:52 完成
mvn -DskipTests package -B -ntp 三个服务打包成功,退出码 0 backend-package.log,11:25:19 完成
git diff --check 通过,无空白错误 仅出现既有 CRLF 归一化提示

测试为本地单元/服务装配验证。名称含 IntegrationTest 的相关测试仍使用 Mockito mapper;不能把它们作为真实数据库并发、设备接入或浏览器 E2E 已通过的证据。带截图的浏览器验证和真实 API/数据库检查由同目录主报告汇总。

已观察到的非阻断警告:JVM 类共享提示、现有弃用/unchecked 编译警告、测试刻意模拟 Redis 失败后的数据库回源警告。没有据此修改依赖版本。

功能确认边界

本后端修复没有功能扩展;资料与现有产品的四项差异统一列于 reference-review.md,随主测试报告交用户确认。未放宽“全部步骤完成才可提交”,未引入自动评分或新渠道。