feat: add book admin display fields

This commit is contained in:
2026-04-27 13:53:37 +08:00
parent 67c33d06be
commit 2fa15625b0
20 changed files with 472 additions and 70 deletions

View File

@@ -26,6 +26,7 @@
| 入参包含分页、筛选、排序、动作语义、组合参数 | 必须使用 `request` |
| 返回实体原样或实体列表 | 可直接返回实体 |
| 返回包含展示、聚合、联表、树、嵌套结构 | 必须使用 `response` |
| 关联表列表/详情需要给前端展示关联对象名称、标题、label | 必须使用 `response` 联表展示字段,实体只保留外键 ID |
| 多个接口 contract 完全一致 | 复用同一个 `request/response` |
| `admin/app` 字段、校验、分页、展示口径不同 | 按端拆分 `request/response` |
@@ -38,6 +39,12 @@
- 同一业务模块存在 `admin/app` 两套接口时,实体只保留一份;仅 `request/response` 按端拆分。
- 改实体字段时,必须同步检查 `doc-sql``Service` 查询/写入、`API` 绑定/返回。
-`request/response` 或接口 contract 时,必须同步检查并更新 `doc-api``API``Service`
- 关联表实体只能承载自身字段和外键 ID禁止把关联对象的 `name/title/label` 等展示字段写入实体或 `doc-sql`
- 关联表的 admin 列表响应默认必须补充主要关联对象展示字段,字段名使用 `<关联对象语义><Name/Title/Label>`,例如 `authorName``bookTitle``typeLabel`
- 关联表详情响应如果用于前端详情页、编辑弹窗或审阅页面,也必须返回与列表一致的关联展示字段;纯内部读取接口可只返回实体。
- 展示字段来源必须由 `Service` 通过 `JOIN`、预加载或批量查询组装到 `response`,禁止要求前端拿到 ID 后再逐条反查名称。
- 关联展示字段只读;`Create/Update` 请求仍只接收外键 ID 和可编辑业务字段,禁止接收或信任前端传入的展示名称。
- 若列表支持按关联展示字段搜索或排序,`total` 统计查询必须同步使用等价关联条件,避免分页总数和列表数据不一致。
## 推荐做法
@@ -47,6 +54,7 @@
| 动作入参 | `<Action><StructName>Req` | `ChangePasswordReq` |
| 详情出参 | `<StructName>Response` | `BookResponse` |
| 列表项出参 | `<StructName>ListItem` | `BookListItem` |
| 关联展示字段 | `<Related> + Name/Title/Label` | `authorName``bookTitle` |
| 选项出参 | `<StructName>Option` | `AuthorOption` |
| 文件 | `model/<module>/<resource>.go``model/<module>/request/<resource>.go``model/<module>/response/<resource>.go` | `model/book/book.go` |