书籍模块
This commit is contained in:
@@ -1,29 +1,243 @@
|
||||
# 书籍信息 admin 接口
|
||||
# 书籍信息 admin 接口
|
||||
|
||||
## 基本信息
|
||||
|
||||
- 模块:book
|
||||
- 资源:书籍
|
||||
- 资源:书籍信息
|
||||
- 端:admin
|
||||
- 鉴权:挂载 `PrivateGroup`,需要 `JWT + Casbin`
|
||||
- 操作审计:创建、更新、单删、批量删除写操作启用 `OperationRecord`
|
||||
- 路由前缀:`/book`
|
||||
- 鉴权:`PrivateGroup`,需要 `JWT + Casbin`
|
||||
- 审计:创建、更新、单删、批量删除启用 `OperationRecord`
|
||||
- 前缀:`/book`
|
||||
- 实体模型:`book.Book`
|
||||
- 搜索入参:`bookReq.BookSearch`
|
||||
- 详情响应:`bookRes.BookResponse`
|
||||
- 列表项:`book.Book`
|
||||
- 返回:写操作 `response.Response{msg}`;详情 `response.Response{data}`;列表 `response.PageResult`
|
||||
- 删除策略:硬删
|
||||
|
||||
## 默认 CRUD
|
||||
## CRUD
|
||||
|
||||
| 动作 | Method | 路径 | API 方法 | Service 方法 |
|
||||
|:---|:---|:---|:---|:---|
|
||||
| 创建 | `POST` | `/book/createBook` | `CreateBook` | `CreateBook` |
|
||||
| 单删 | `DELETE` | `/book/deleteBook` | `DeleteBook` | `DeleteBook` |
|
||||
| 批量删除 | `DELETE` | `/book/deleteBookByIds` | `DeleteBookByIds` | `DeleteBookByIds` |
|
||||
| 更新 | `PUT` | `/book/updateBook` | `UpdateBook` | `UpdateBook` |
|
||||
| 详情 | `GET` | `/book/findBook` | `FindBook` | `GetBook` |
|
||||
| 分页列表 | `GET` | `/book/getBookList` | `GetBookList` | `GetBookInfoList` |
|
||||
### 创建书籍信息
|
||||
|
||||
## 参数与返回
|
||||
- Method:`POST`
|
||||
- Path:`/book/createBook`
|
||||
- Handler:`BookApi.CreateBook`
|
||||
- Service:`BookService.CreateBook`
|
||||
- 审计:是
|
||||
|
||||
- 创建、更新:`body` 使用 `book.Book`。
|
||||
- 单删、详情:`query id`。
|
||||
- 批量删除:`query ids[]`。
|
||||
- 分页列表:`query` 使用 `bookReq.BookSearch`,返回 `response.PageResult`。
|
||||
- 详情返回:`bookRes.BookResponse`。
|
||||
#### Request Body `book.Book`
|
||||
|
||||
| 字段 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| title | string | 是 | 非空,最大 `255` | 书名主标题 |
|
||||
| subtitle | string | 否 | 最大 `255` | 书籍副标题 |
|
||||
| bookType | string | 是 | 非空,值必须存在于系统字典 `book_type` | 书籍类型字典值 |
|
||||
| eraTag | string | 否 | `book_era_tag`:`unknown/ancient/han/tang/song/yuan/ming/qing/modern/contemporary`;默认 `unknown` | 时代标签字典值 |
|
||||
| coverUrl | string | 否 | 最大 `500` | 封面图片 URL |
|
||||
| publisher | string | 否 | 最大 `128` | 出版社名称 |
|
||||
| publishedAt | string | 否 | 日期类型 | 出版日期 |
|
||||
| intro | string | 否 | 文本 | 书籍简介 |
|
||||
| hotScore | int64 | 否 | `>= 0`;默认 `0` | 热度聚合值 |
|
||||
| rating | float64 | 否 | `0 <= rating <= 10`;默认 `0.0` | 书籍评分 |
|
||||
| commentCount | int64 | 否 | `>= 0`;默认 `0` | 点评数聚合值 |
|
||||
| wordCount | int64 | 否 | `>= 0`;默认 `0` | 书籍总字数 |
|
||||
| completionStatus | string | 否 | `book_completion_status`:`completed/serializing`;默认 `serializing` | 书籍完结状态 |
|
||||
| publishStatus | string | 否 | `book_publish_status`:`draft/off_shelf/on_shelf`;默认 `draft` | 书籍上下架状态 |
|
||||
| seriesId | uint | 否 | 可为空;存在时应为有效系列 ID | 所属系列 ID |
|
||||
| seriesSort | int | 否 | `>= 0`;默认 `0` | 同系列内展示排序 |
|
||||
| rawTxtUrl | string | 否 | 最大 `500` | 原始 txt 文件 URL |
|
||||
|
||||
#### Response
|
||||
|
||||
- `response.Response{msg}`
|
||||
|
||||
#### 规则
|
||||
|
||||
- 创建请求禁止传服务端生成字段:`id/createdAt/updatedAt`。
|
||||
- `bookType` 是动态值域字典,业务侧只校验值存在性,不参与状态流转。
|
||||
|
||||
### 删除书籍信息
|
||||
|
||||
- Method:`DELETE`
|
||||
- Path:`/book/deleteBook`
|
||||
- Handler:`BookApi.DeleteBook`
|
||||
- Service:`BookService.DeleteBook`
|
||||
- 审计:是
|
||||
|
||||
#### Request Query
|
||||
|
||||
| 参数 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| id | int | 是 | `> 0` | 书籍 ID |
|
||||
|
||||
#### Response
|
||||
|
||||
- `response.Response{msg}`
|
||||
|
||||
### 批量删除书籍信息
|
||||
|
||||
- Method:`DELETE`
|
||||
- Path:`/book/deleteBookByIds`
|
||||
- Handler:`BookApi.DeleteBookByIds`
|
||||
- Service:`BookService.DeleteBookByIds`
|
||||
- 审计:是
|
||||
|
||||
#### Request Query
|
||||
|
||||
| 参数 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| ids | int[] | 二选一 | 非空,元素均 `> 0` | 书籍 ID 数组 |
|
||||
| ids[] | int[] | 二选一 | 非空,元素均 `> 0` | 书籍 ID 数组,兼容数组写法 |
|
||||
|
||||
#### Response
|
||||
|
||||
- `response.Response{msg}`
|
||||
|
||||
#### 规则
|
||||
|
||||
- `ids` 与 `ids[]` 二选一。
|
||||
|
||||
### 更新书籍信息
|
||||
|
||||
- Method:`PUT`
|
||||
- Path:`/book/updateBook`
|
||||
- Handler:`BookApi.UpdateBook`
|
||||
- Service:`BookService.UpdateBook`
|
||||
- 审计:是
|
||||
|
||||
#### Request Body `book.Book`
|
||||
|
||||
| 字段 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| id | uint | 是 | `> 0` | 书籍 ID |
|
||||
| title | string | 是 | 非空,最大 `255` | 书名主标题 |
|
||||
| subtitle | string | 否 | 最大 `255` | 书籍副标题 |
|
||||
| bookType | string | 是 | 非空,值必须存在于系统字典 `book_type` | 书籍类型字典值 |
|
||||
| eraTag | string | 否 | `book_era_tag`:`unknown/ancient/han/tang/song/yuan/ming/qing/modern/contemporary` | 时代标签字典值 |
|
||||
| coverUrl | string | 否 | 最大 `500` | 封面图片 URL |
|
||||
| publisher | string | 否 | 最大 `128` | 出版社名称 |
|
||||
| publishedAt | string | 否 | 日期类型 | 出版日期 |
|
||||
| intro | string | 否 | 文本 | 书籍简介 |
|
||||
| hotScore | int64 | 否 | `>= 0` | 热度聚合值 |
|
||||
| rating | float64 | 否 | `0 <= rating <= 10` | 书籍评分 |
|
||||
| commentCount | int64 | 否 | `>= 0` | 点评数聚合值 |
|
||||
| wordCount | int64 | 否 | `>= 0` | 书籍总字数 |
|
||||
| completionStatus | string | 否 | `book_completion_status`:`completed/serializing` | 书籍完结状态 |
|
||||
| publishStatus | string | 否 | `book_publish_status`:`draft/off_shelf/on_shelf` | 书籍上下架状态 |
|
||||
| seriesId | uint | 否 | 可为空;存在时应为有效系列 ID | 所属系列 ID |
|
||||
| seriesSort | int | 否 | `>= 0` | 同系列内展示排序 |
|
||||
| rawTxtUrl | string | 否 | 最大 `500` | 原始 txt 文件 URL |
|
||||
|
||||
#### Response
|
||||
|
||||
- `response.Response{msg}`
|
||||
|
||||
#### 规则
|
||||
|
||||
- 更新请求禁止传服务端维护字段:`createdAt/updatedAt`。
|
||||
- 更新使用实体 `Save`,前端应传完整可编辑实体,避免字段被零值覆盖。
|
||||
- `bookType` 是动态值域字典,业务侧只校验值存在性,不参与状态流转。
|
||||
|
||||
### 查询书籍信息详情
|
||||
|
||||
- Method:`GET`
|
||||
- Path:`/book/findBook`
|
||||
- Handler:`BookApi.FindBook`
|
||||
- Service:`BookService.GetBook`
|
||||
- 审计:否
|
||||
|
||||
#### Request Query
|
||||
|
||||
| 参数 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| id | int | 是 | `> 0` | 书籍 ID |
|
||||
|
||||
#### Response `bookRes.BookResponse`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|:---|:---|:---|
|
||||
| book | object | 书籍实体 |
|
||||
| book.id | uint | 主键 ID |
|
||||
| book.createdAt | string | 创建时间 |
|
||||
| book.updatedAt | string | 更新时间 |
|
||||
| book.title | string | 书名主标题 |
|
||||
| book.subtitle | string | 书籍副标题 |
|
||||
| book.bookType | string | 书籍类型字典值,对应 `book_type` |
|
||||
| book.eraTag | string | 时代标签字典值,对应 `book_era_tag` |
|
||||
| book.coverUrl | string | 封面图片 URL |
|
||||
| book.publisher | string | 出版社名称 |
|
||||
| book.publishedAt | string | 出版日期 |
|
||||
| book.intro | string | 书籍简介 |
|
||||
| book.hotScore | int64 | 热度聚合值 |
|
||||
| book.rating | float64 | 书籍评分,范围 `0-10` |
|
||||
| book.commentCount | int64 | 点评数聚合值 |
|
||||
| book.wordCount | int64 | 书籍总字数 |
|
||||
| book.completionStatus | string | 书籍完结状态字典值,对应 `book_completion_status` |
|
||||
| book.publishStatus | string | 书籍上下架状态字典值,对应 `book_publish_status` |
|
||||
| book.seriesId | uint | 所属系列 ID |
|
||||
| book.seriesSort | int | 同系列内展示排序 |
|
||||
| book.rawTxtUrl | string | 原始 txt 文件 URL |
|
||||
|
||||
### 分页查询书籍信息列表
|
||||
|
||||
- Method:`GET`
|
||||
- Path:`/book/getBookList`
|
||||
- Handler:`BookApi.GetBookList`
|
||||
- Service:`BookService.GetBookInfoList`
|
||||
- 审计:否
|
||||
|
||||
#### Request Query `bookReq.BookSearch`
|
||||
|
||||
| 参数 | 类型 | 必填 | 规则 | 说明 |
|
||||
|:---|:---|:---:|:---|:---|
|
||||
| page | int | 否 | 默认 `1`,最小 `1` | 页码 |
|
||||
| pageSize | int | 否 | 默认 `10`,最大 `100` | 每页数量 |
|
||||
| keyword | string | 否 | 模糊匹配 `title` 或 `subtitle` | 关键字 |
|
||||
| title | string | 否 | 模糊匹配 `title` | 书名主标题 |
|
||||
| bookType | string | 否 | 值必须存在于系统字典 `book_type` | 书籍类型 |
|
||||
| eraTag | string | 否 | `book_era_tag`:`unknown/ancient/han/tang/song/yuan/ming/qing/modern/contemporary` | 时代标签 |
|
||||
| completionStatus | string | 否 | `book_completion_status`:`completed/serializing` | 完结状态 |
|
||||
| publishStatus | string | 否 | `book_publish_status`:`draft/off_shelf/on_shelf` | 上下架状态 |
|
||||
| seriesId | uint | 否 | `> 0` | 系列 ID |
|
||||
|
||||
#### Response `response.PageResult`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|:---|:---|:---|
|
||||
| list | array | `book.Book` 列表 |
|
||||
| list[].id | uint | 主键 ID |
|
||||
| list[].createdAt | string | 创建时间 |
|
||||
| list[].updatedAt | string | 更新时间 |
|
||||
| list[].title | string | 书名主标题 |
|
||||
| list[].subtitle | string | 书籍副标题 |
|
||||
| list[].bookType | string | 书籍类型字典值,对应 `book_type` |
|
||||
| list[].eraTag | string | 时代标签字典值,对应 `book_era_tag` |
|
||||
| list[].coverUrl | string | 封面图片 URL |
|
||||
| list[].publisher | string | 出版社名称 |
|
||||
| list[].publishedAt | string | 出版日期 |
|
||||
| list[].intro | string | 书籍简介 |
|
||||
| list[].hotScore | int64 | 热度聚合值 |
|
||||
| list[].rating | float64 | 书籍评分,范围 `0-10` |
|
||||
| list[].commentCount | int64 | 点评数聚合值 |
|
||||
| list[].wordCount | int64 | 书籍总字数 |
|
||||
| list[].completionStatus | string | 书籍完结状态字典值,对应 `book_completion_status` |
|
||||
| list[].publishStatus | string | 书籍上下架状态字典值,对应 `book_publish_status` |
|
||||
| list[].seriesId | uint | 所属系列 ID |
|
||||
| list[].seriesSort | int | 同系列内展示排序 |
|
||||
| list[].rawTxtUrl | string | 原始 txt 文件 URL |
|
||||
| total | int64 | 总数 |
|
||||
| page | int | 当前页 |
|
||||
| pageSize | int | 每页数量 |
|
||||
|
||||
#### 规则
|
||||
|
||||
- 列表默认排序:`id desc`。
|
||||
|
||||
## 规则
|
||||
|
||||
- admin 端书籍信息 CRUD 统一挂载到 `PrivateGroup`,需要 `JWT + Casbin`。
|
||||
- 写操作启用 `OperationRecord`;读操作不启用操作审计。
|
||||
- 删除策略为硬删,实体使用 `book.HardDeleteModel`,不维护 `deleted_at`。
|
||||
- `eraTag/completionStatus/publishStatus` 必须符合对应固定值域字典。
|
||||
- `hotScore/commentCount/wordCount/seriesSort` 不能小于 `0`;`rating` 范围为 `0-10`。
|
||||
- `seriesId` 可为空;非空时表示书籍挂载到对应系列,展示排序使用 `seriesSort`。
|
||||
|
||||
Reference in New Issue
Block a user