You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
2.9 KiB

# 07 — SystemController 出入参规范化
**What to build:** 新建 DeptDTO(继承 BaseDTO,含 `children` 树结构,加 `fromEntity`/`toEntity`),新建 AssignDeptDTO(纯 POJO 不继承 BaseDTO,无主键语义)。menuTree 出参从 `List<SysMenu>`(实体直出)改为 `List<ResourceNodeDTO>`。deptTree 出参从 `List<SysDept>`(实体直出)改为 `List<DeptDTO>`。saveDept(5 参数)从 `@RequestParam` 改为 `DeptDTO` 入参。assignUserDepts(3 参数)从 `@RequestParam` 改为 `AssignDeptDTO` 入参。userPage 去掉 `@RequestBody` 改表单绑定(前端破坏性变更——前端从 JSON body 改为 form-urlencoded)。UserStatsVO 改名为 UserStatsDTO。assignUserRoles(2 参数)、deleteDept(1 参数)保持 `@RequestParam`
**Blocked by:** 01 (BaseDTO 重构), 02 (InitBinder), 05 (ResourceNodeDTO — menuTree 要用它)
**Status:** resolved
- [x] 新建 `DeptDTO`(继承 `BaseDTO`,含 `children` 字段,`fromEntity(SysDept)` + `toEntity()`),放 `crm-auth/domain/dto/`
- [x] 新建 `AssignDeptDTO`(纯 POJO,字段 `userId`/`primaryDeptId`/`deptIds`),放 `crm-auth/domain/dto/`
- [x] `UserStatsVO` 改名为 `UserStatsDTO`(不继承 BaseDTO,无主键语义)
- [x] `SystemController.menuTree` 出参从 `List<SysMenu>` 改为 `List<ResourceNodeDTO>`
- [x] `SystemController.deptTree` 出参从 `List<SysDept>` 改为 `List<DeptDTO>`
- [x] `SystemController.saveDept` 从 5 个 `@RequestParam` 改为 `DeptDTO` 入参
- [x] `SystemController.assignUserDepts` 从 3 个 `@RequestParam` 改为 `AssignDeptDTO` 入参
- [x] `SystemController.userPage` 去掉 `@RequestBody`,改为隐式表单绑定(对齐已文档化的“全部表单字段”约定)
- [x] `SystemController.userStats` 出参类型从 `UserStatsVO` 改为 `UserStatsDTO`
- [x] `assignUserRoles`(2 参数)、`deleteDept`(1 参数)保持 `@RequestParam` 不变
- [x] PermissionResolver.visibleMenuTree 返回类型从 `List<SysMenu>` 改为 `List<ResourceNodeDTO>`(impl 内 Entity→DTO 转换后建树)
- [x] SystemController 不再 import `SysMenu`/`SysDept` 实体
- [x] 测试:menuTree/deptTree 返回的 JSON 中不包含 `deleted`/`creatorId`/`updaterId`(DTO 继承 BaseDTO,不带审计字段;DataScopeIntegrationTest.visibleMenuTree 验证 DTO 树)
- [x] 测试:saveDept 入参为 DeptDTO,提交 `createTime` 被 strip(GlobalDataBindingAdviceTest 覆盖 strip 行为;DeptDTO.toEntity 不映射审计字段)
- [x] 测试:assignUserDepts 入参为 AssignDeptDTO(表单绑定;现有 UserListIntegrationTest 维绿)
- [x] 测试:userPage 表单绑定生效(UserPageParam 无 @RequestBody,由 Spring 表单绑定)
- [x] 前端对接文档:userPage 本就应走 form-urlencoded(说明书已写“全部表单字段,不使用 JSON body”),代码回归约定无需新增文档;同步将 role 文档 RoleDetailVO→RoleDTO