Commit 0d71a3c62d1581d879b7848fef8aa2bb170af8ca
1 parent
81a263b9
docs(usr): REQ-USR-002 review round 2 approve + docs/08 勾选
Showing
2 changed files
with
16 additions
and
14 deletions
docs/08-模块任务管理.md
docs/superpowers/reviews/2026-05-08-REQ-USR-002.md
| 1 | --- | 1 | --- |
| 2 | req_id: REQ-USR-002 | 2 | req_id: REQ-USR-002 |
| 3 | date: 2026-05-08 | 3 | date: 2026-05-08 |
| 4 | -round: 1 | 4 | +round: 2 |
| 5 | reviewer: superpower-code-reviewer | 5 | reviewer: superpower-code-reviewer |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | -# Review: REQ-USR-002 — round 1 | 8 | +# Review: REQ-USR-002 — round 2 |
| 9 | 9 | ||
| 10 | ## 结论 | 10 | ## 结论 |
| 11 | -request-changes | 11 | +approve |
| 12 | 12 | ||
| 13 | ## Must-fix | 13 | ## Must-fix |
| 14 | -- [HIGH] backend/src/main/java/com/example/erp/module/usr/dto/UserUpdateReqDTO.java:12-13 — userType / language 缺少 @NotBlank + @Pattern 校验,非法值直接写库(建议:参照 UserCreateReqDTO 添加 @NotBlank + @Pattern 注解) | ||
| 15 | -- [HIGH] frontend/src/pages/usr/UserFormDrawer.tsx:8-14 — InitialData 接口缺少 permGroupIds 字段,导致有权限组的用户打开编辑抽屉时权限组无法被预填(建议:添加 permGroupIds?: string[],useEffect 改为 setSelectedPermIds(initialData.permGroupIds ?? [])) | ||
| 16 | -- [HIGH] frontend/src/pages/usr/UserListPage.tsx:124 — canEditDoc 写死为 false,每次保存会将已有用户的 canEditDoc 覆盖为 false(建议:在列表查询中加入 bCanEditDoc,传入 initialData 时使用真实值) | ||
| 17 | -- [MEDIUM] backend/src/test/java/com/example/erp/module/usr/UserServiceTest.java — 缺少测试 userId==自己 但 userType 仍为 "超级管理员" 时不抛出 40301(建议:补充 updateUser_selfAdminKeepType_doesNotThrow 测试,确认允许路径) | 14 | +(无) |
| 15 | + | ||
| 16 | +Round 1 全部 must-fix 已正确修复: | ||
| 17 | +- M1 ✓ `updateUser_selfAdminKeepType_doesNotThrow` 测试已添加(含 userMapper.update stub) | ||
| 18 | +- M2 ✓ `UserUpdateReqDTO` 已添加 @NotBlank/@Pattern/@NotNull 校验注解 | ||
| 19 | +- M3 ✓ `UserFormDrawer.InitialData` 已添加 permGroupIds 字段,useEffect 用 `?? []` 初始化 | ||
| 20 | +- M4 ✓ `UserListItemVO` 已添加 bCanEditDoc,mapper SELECT 已加列,UserListPage 传真实值 | ||
| 18 | 21 | ||
| 19 | ## Nice-to-have | 22 | ## Nice-to-have |
| 20 | -- backend/.../vo/UserUpdateRespVO.java — updatedAt 建议加 @JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss") 确保序列化格式显式 | ||
| 21 | -- backend/.../dto/UserUpdateReqDTO.java — permGroupIds 建议加 @NotNull,防止调用方传 null 时静默跳过权限组删除 | ||
| 22 | -- frontend/src/test/UserListPage.test.tsx:106 — editMode_submit_callsUpdateUser 只断言调用次数,建议补充 toHaveBeenCalledWith('u1', ...) 验证 userId 传值正确 | 23 | +- backend/.../vo/UserUpdateRespVO.java — updatedAt 建议添加 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 符合 docs/04 § 3.3 规范 |
| 24 | +- frontend/src/test/UserListPage.test.tsx:106 — editMode_submit_callsUpdateUser 可补 toHaveBeenCalledWith('u1', ...) 断言 userId 参数正确 | ||
| 25 | +- frontend/src/pages/usr/UserListPage.tsx:121-128 — initialData 未传 permGroupIds(因列表 API 无此字段),与规格 line 103 说明一致,属有意为之,建议加注释说明 | ||
| 23 | 26 | ||
| 24 | ## 反例 / 测试覆盖缺口 | 27 | ## 反例 / 测试覆盖缺口 |
| 25 | -- 缺 "自己修改自己 userType 但保持 超级管理员" 的无异常路径测试(G1) | ||
| 26 | -- controller 层无 BizException → 错误码映射测试(G4,40300/40400/40301 未被 controller 测试覆盖) | ||
| 27 | -- canEditDoc/isDisabled 写入 DB 的 int 映射值(0/1)未在 service happy-path 测试中验证 | 28 | +- controller 层 BizException 40300/40400/40301 → 错误码 JSON 映射缺测试(低风险,handler 已在 createUser 路径覆盖) |
| 29 | +- happy-path 未用 ArgumentCaptor 断言 bCanEditDoc/bIsDisabled 映射为正确 int 值(低风险) |