Files
xuanzhi-service/server/.ai-specs/doc-api/admin/book_comment.md

207 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 书籍评论 admin 接口
## 基本信息
- 模块book
- 资源:书籍评论
-admin
- 鉴权:`PrivateGroup`,需要 `JWT + Casbin`
- 审计:创建、更新、单删、批量删除启用 `OperationRecord`
- 前缀:`/book`
- 实体模型:`book.BookComment`
- 搜索入参:`bookReq.BookCommentSearch`
- 详情响应:`bookRes.BookCommentResponse`
- 列表项:`bookRes.BookCommentListItem`
- 返回:写操作 `response.Response{msg}`;详情 `response.Response{data}`;列表 `response.PageResult`
- 删除策略:硬删
## CRUD
### 创建书籍评论
- Method`POST`
- Path`/book/createBookComment`
- Handler`BookCommentApi.CreateBookComment`
- Service`BookCommentService.CreateBookComment`
- 审计:是
#### Request Body `book.BookComment`
| 字段 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| memberUserId | uint | 是 | 数据库非空 | 评论用户的会员 ID |
| bookId | uint | 是 | 数据库非空 | 所属书籍 ID |
| chapterId | uint | 否 | 默认 `0``>= 0` | 评论目标章节 ID`0` 表示整本书 |
| lineIndex | int | 否 | 默认 `0``>= 0`;整书评论时必须为 `0` | 评论目标文本行下标,`0` 表示整章或整本书 |
| content | string | 是 | 数据库非空 | 评论正文内容 |
| likeCount | int64 | 否 | 默认 `0``>= 0` | 评论点赞聚合值 |
| commentStatus | string | 否 | 默认 `normal`;仅允许 `normal/hidden` | 评论状态字典值,对应 `book_comment_status` |
#### Response
- `response.Response{msg}`
#### 规则
- 创建请求禁止传服务端生成字段:`id/createdAt/updatedAt`
- `chapterId=0` 表示整书评论,此时 `lineIndex` 必须为 `0`
- `chapterId>0` 时允许 `lineIndex>=0`,其中 `lineIndex=0` 表示整章评论。
### 删除书籍评论
- Method`DELETE`
- Path`/book/deleteBookComment`
- Handler`BookCommentApi.DeleteBookComment`
- Service`BookCommentService.DeleteBookComment`
- 审计:是
#### Request Query
| 参数 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| id | int | 是 | `> 0` | 评论 ID |
#### Response
- `response.Response{msg}`
### 批量删除书籍评论
- Method`DELETE`
- Path`/book/deleteBookCommentByIds`
- Handler`BookCommentApi.DeleteBookCommentByIds`
- Service`BookCommentService.DeleteBookCommentByIds`
- 审计:是
#### Request Query
| 参数 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| ids | int[] | 二选一 | 非空,元素均为主键 ID | 评论 ID 数组 |
| ids[] | int[] | 二选一 | 非空,元素均为主键 ID | 评论 ID 数组,兼容数组写法 |
#### Response
- `response.Response{msg}`
#### 规则
- `ids``ids[]` 二选一。
### 更新书籍评论
- Method`PUT`
- Path`/book/updateBookComment`
- Handler`BookCommentApi.UpdateBookComment`
- Service`BookCommentService.UpdateBookComment`
- 审计:是
#### Request Body `book.BookComment`
| 字段 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| id | uint | 是 | `> 0` | 评论 ID |
| memberUserId | uint | 是 | 数据库非空 | 评论用户的会员 ID |
| bookId | uint | 是 | 数据库非空 | 所属书籍 ID |
| chapterId | uint | 否 | 默认 `0``>= 0` | 评论目标章节 ID`0` 表示整本书 |
| lineIndex | int | 否 | 默认 `0``>= 0`;整书评论时必须为 `0` | 评论目标文本行下标,`0` 表示整章或整本书 |
| content | string | 是 | 数据库非空 | 评论正文内容 |
| likeCount | int64 | 否 | 默认 `0``>= 0` | 评论点赞聚合值 |
| commentStatus | string | 否 | 默认 `normal`;仅允许 `normal/hidden` | 评论状态字典值,对应 `book_comment_status` |
#### Response
- `response.Response{msg}`
#### 规则
- 更新请求禁止传服务端维护字段:`createdAt/updatedAt`
- 更新为实体全量保存,前端应传完整可编辑实体,避免字段被零值覆盖。
- `chapterId=0` 表示整书评论,此时 `lineIndex` 必须为 `0`
- `chapterId>0` 时允许 `lineIndex>=0`,其中 `lineIndex=0` 表示整章评论。
### 查询书籍评论详情
- Method`GET`
- Path`/book/findBookComment`
- Handler`BookCommentApi.FindBookComment`
- Service`BookCommentService.GetBookComment`
- 审计:否
#### Request Query
| 参数 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| id | int | 是 | `> 0` | 评论 ID |
#### Response `bookRes.BookCommentResponse`
| 字段 | 类型 | 说明 |
|:---|:---|:---|
| bookComment | object | 评论实体 |
| bookComment.id | uint | 评论 ID |
| bookComment.createdAt | time | 创建时间 |
| bookComment.updatedAt | time | 更新时间 |
| bookComment.memberUserId | uint | 评论用户的会员 ID |
| bookComment.bookId | uint | 所属书籍 ID |
| bookComment.bookTitle | string | 书籍标题展示字段,来源于 `book.title AS book_title` |
| bookComment.chapterId | uint | 评论目标章节 ID`0` 表示整本书 |
| bookComment.chapterTitle | string | 章节标题展示字段,来源于 `book_chapter.title AS chapter_title`;整书评论可为空 |
| bookComment.lineIndex | int | 评论目标文本行下标,`0` 表示整章或整本书 |
| bookComment.content | string | 评论正文内容 |
| bookComment.likeCount | int64 | 评论点赞聚合值 |
| bookComment.commentStatus | string | 评论状态字典值,对应 `book_comment_status` |
### 分页查询书籍评论列表
- Method`GET`
- Path`/book/getBookCommentList`
- Handler`BookCommentApi.GetBookCommentList`
- Service`BookCommentService.GetBookCommentInfoList`
- 审计:否
#### Request Query `bookReq.BookCommentSearch`
| 参数 | 类型 | 必填 | 规则 | 说明 |
|:---|:---|:---:|:---|:---|
| page | int | 否 | 默认 `1`,最小 `1` | 页码 |
| pageSize | int | 否 | 默认 `10`,最大 `100` | 每页数量 |
| memberUserId | uint | 否 | 精确匹配 | 评论用户的会员 ID |
| bookId | uint | 否 | 精确匹配 | 所属书籍 ID |
| chapterId | uint | 否 | 精确匹配 | 评论目标章节 ID`0` 表示整本书 |
| commentStatus | string | 否 | 仅允许 `normal/hidden` | 评论状态字典值,对应 `book_comment_status` |
#### Response `response.PageResult`
| 字段 | 类型 | 说明 |
|:---|:---|:---|
| list | array | `bookRes.BookCommentListItem` 列表 |
| list[].id | uint | 评论 ID |
| list[].createdAt | time | 创建时间 |
| list[].updatedAt | time | 更新时间 |
| list[].memberUserId | uint | 评论用户的会员 ID |
| list[].bookId | uint | 所属书籍 ID |
| list[].bookTitle | string | 书籍标题展示字段,来源于 `book.title AS book_title` |
| list[].chapterId | uint | 评论目标章节 ID`0` 表示整本书 |
| list[].chapterTitle | string | 章节标题展示字段,来源于 `book_chapter.title AS chapter_title`;整书评论可为空 |
| list[].lineIndex | int | 评论目标文本行下标,`0` 表示整章或整本书 |
| list[].content | string | 评论正文内容 |
| list[].likeCount | int64 | 评论点赞聚合值 |
| list[].commentStatus | string | 评论状态字典值,对应 `book_comment_status` |
| total | int64 | 总数 |
| page | int | 当前页 |
| pageSize | int | 每页数量 |
#### 规则
- 列表默认排序:`id desc`
- 列表通过 `book_comment` 联表 `book``book_chapter` 补充 `bookTitle/chapterTitle` 展示字段;写接口仍只接收 `bookId/chapterId`
## 规则
- `commentStatus` 必须符合 `book_comment_status``normal` 正常,`hidden` 隐藏。
- `lineIndex/likeCount` 不能小于 `0`
- 整书评论 `chapterId=0``lineIndex` 必须为 `0`
- 删除策略为硬删。
- `bookTitle/chapterTitle` 为只读展示字段,禁止写入实体表结构,禁止作为创建或更新入参。