diff --git a/docs/08-模块任务管理.md b/docs/08-模块任务管理.md index e0fa96c..057203b 100644 --- a/docs/08-模块任务管理.md +++ b/docs/08-模块任务管理.md @@ -62,5 +62,5 @@ - 功能: - [x] REQ-USR-004 用户登录 - [x] REQ-USR-001 增加用户 - - [ ] REQ-USR-003 查询用户 + - [x] REQ-USR-003 查询用户 - [ ] REQ-USR-002 修改用户 diff --git a/docs/superpowers/reviews/2026-05-08-REQ-USR-003.md b/docs/superpowers/reviews/2026-05-08-REQ-USR-003.md index 3731a1d..70b0352 100644 --- a/docs/superpowers/reviews/2026-05-08-REQ-USR-003.md +++ b/docs/superpowers/reviews/2026-05-08-REQ-USR-003.md @@ -1,21 +1,25 @@ --- req_id: REQ-USR-003 date: 2026-05-08 -round: 2 +round: 4 reviewer: superpower-code-reviewer --- -# Review: REQ-USR-003 — round 2 +# Review: REQ-USR-003 — round 4 ## 结论 -request-changes +approve ## Must-fix -- [major] docs/05-API接口契约.md:27 — 全局分页约定仍使用 `pageNum`,而 REQ-USR-003 具体接口入参与响应已修为 `page`,文档内部矛盾(建议:将第 27 行全局约定中的 `pageNum` 统一改为 `page`,与实际实现保持一致) +(无) ## Nice-to-have -- docs/05-API接口契约.md:77 — staffName/department 的 equals matchType 对 NULL 员工的行为未记录在文档,建议补充说明(equals NULL 用户会被 JOIN 过滤掉) +- backend/src/main/java/com/example/erp/module/usr/controller/UserController.java:35-50 — docs/05 声明了 Permission: usr:query,但当前 SecurityConfig 仅做鉴权(authenticated),未启用 @PreAuthorize,属跨切面 REQ 的存量缺口,非本 REQ 引入 +- backend/src/main/java/com/example/erp/common/response/Result.java:19 — docs/04 § 1.3 示例写 code:0,实际实现与 docs/05 一致为 200;docs/04 示例是历史遗留,可单独 docs commit 修正 +- backend/src/main/resources/mapper/UsrUserMapper.xml:29,43 — staffName/department equals 分支未加 IS NULL OR,因为 equals '部门名' 语义上不应匹配无职员用户,行为正确但可补注释说明 +- backend/src/test/java/com/example/erp/module/usr/UserControllerTest.java:109 — getUsers_withToken_returns200 未用 ArgumentCaptor 验证五个参数均正确转发给 service ## 反例 / 测试覆盖缺口 -- T1: 缺少针对 notContains NULL 修复的集成测试(验证 staffName/department 为 NULL 的用户确实出现在 notContains 结果中) -- T2: 前端 queryField/matchType 未做枚举校验,非法值直接透传给后端(后端也无校验,可在后续迭代补充) +- 无 XML 动态查询路径(含/不含/等于、disabled 是否、lastLoginDate DATE 过滤、pageSize cap)的集成/切片测试;mapper 被 mock 后 XML 逻辑未被单元覆盖 +- UserControllerTest 未断言响应中不含 sPasswordHash / iLoginFailCount / tLockUntil +- 前端测试未覆盖翻页 onChange 回调(load 以正确页码调用)