--- req_id: REQ-USR-002 date: 2026-05-08 round: 2 reviewer: superpower-code-reviewer --- # Review: REQ-USR-002 — round 2 ## 结论 approve ## Must-fix (无) Round 1 全部 must-fix 已正确修复: - M1 ✓ `updateUser_selfAdminKeepType_doesNotThrow` 测试已添加(含 userMapper.update stub) - M2 ✓ `UserUpdateReqDTO` 已添加 @NotBlank/@Pattern/@NotNull 校验注解 - M3 ✓ `UserFormDrawer.InitialData` 已添加 permGroupIds 字段,useEffect 用 `?? []` 初始化 - M4 ✓ `UserListItemVO` 已添加 bCanEditDoc,mapper SELECT 已加列,UserListPage 传真实值 ## Nice-to-have - backend/.../vo/UserUpdateRespVO.java — updatedAt 建议添加 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 符合 docs/04 § 3.3 规范 - frontend/src/test/UserListPage.test.tsx:106 — editMode_submit_callsUpdateUser 可补 toHaveBeenCalledWith('u1', ...) 断言 userId 参数正确 - frontend/src/pages/usr/UserListPage.tsx:121-128 — initialData 未传 permGroupIds(因列表 API 无此字段),与规格 line 103 说明一致,属有意为之,建议加注释说明 ## 反例 / 测试覆盖缺口 - controller 层 BizException 40300/40400/40301 → 错误码 JSON 映射缺测试(低风险,handler 已在 createUser 路径覆盖) - happy-path 未用 ArgumentCaptor 断言 bCanEditDoc/bIsDisabled 映射为正确 int 值(低风险)