本文引用的文件
本文件面向AI有声书生成平台的评论功能,提供评论数据模型的权威说明。重点涵盖Comment模型字段定义、与User和BookChapter的多对一关系、当前实现的评论读取与发表能力、以及在内容发现与质量评估中的作用。由于当前仓库中未实现评论删除、回复、审核与评分统计等高级功能,本文将基于现有代码进行准确描述,并在“概念性概述”部分给出扩展建议。
评论功能位于后端服务的独立模块中,采用Koa路由+Prisma ORM的典型分层结构:
应用入口:注册路由并启动服务
graph TB
subgraph "应用入口"
APP["app.ts<br/>注册路由与中间件"]
end
subgraph "评论模块"
CTRL["comments.controller.ts<br/>路由与控制器"]
SVC["comments.service.ts<br/>业务与数据访问"]
PRISMA["schema.prisma<br/>Comment/User/BookChapter 关系"]
end
APP --> CTRL
CTRL --> SVC
SVC --> PRISMA
图表来源
章节来源
章节来源
评论功能的调用链路如下:
sequenceDiagram
participant Client as "客户端"
participant Router as "CommentsController"
participant Service as "CommentsService"
participant DB as "Prisma Client"
Client->>Router : "GET /api/comments/ : chapterId"
Router->>Service : "getCommentsByChapterId(chapterId)"
Service->>DB : "findMany(where : { chapterId }, orderBy : { createdAt : desc })"
DB-->>Service : "评论数组"
Service-->>Router : "评论数组"
Router-->>Client : "{ code : 0, data : comments }"
Client->>Router : "POST /api/comments { chapterId, content, rating }"
Router->>Service : "addComment(userId, chapterId, content, rating)"
Service->>DB : "create({ userId, chapterId, content, rating })"
DB-->>Service : "新建评论"
Service-->>Router : "新建评论"
Router-->>Client : "{ code : 0, data : comment }"
图表来源
索引
在chapterId与userId上建立索引,以提升查询与关联性能
erDiagram
USER {
int id PK
string phone
string openid
string nickname
string avatar
}
BOOKCHAPTER {
int id PK
int bookId
int parentId
int level
int number
string title
}
COMMENT {
int id PK
int userId FK
int chapterId FK
text content
int rating
datetime createdAt
}
USER ||--o{ COMMENT : "拥有"
BOOKCHAPTER ||--o{ COMMENT : "被评论"
图表来源
章节来源
新增评论
行为:创建一条新的评论记录
classDiagram
class CommentsService {
+getCommentsByChapterId(chapterId) Promise~Comment[]~
+addComment(userId, chapterId, content, rating) Promise~Comment~
}
class PrismaClient {
+comment
}
CommentsService --> PrismaClient : "使用"
图表来源
章节来源
POST /api/comments
响应:统一格式,data为新建评论
flowchart TD
Start(["请求进入"]) --> Parse["解析路径参数/请求体"]
Parse --> Validate{"参数有效?"}
Validate --> |否| ErrorResp["返回错误响应"]
Validate --> |是| CallSvc["调用 CommentsService"]
CallSvc --> OkResp["返回成功响应"]
ErrorResp --> End(["结束"])
OkResp --> End
图表来源
章节来源
章节来源
以下示例展示如何使用现有接口进行评论相关操作。请根据实际部署地址替换域名与端口。
获取章节评论
发表评论
统一响应格式
章节来源
[本节为概念性扩展说明,不对应具体源码,故无章节来源]
[本节为概念性扩展说明,不对应具体源码,故无章节来源]
应用入口依赖控制器:app.ts注册评论路由
graph LR
CTRL["comments.controller.ts"] --> SVC["comments.service.ts"]
SVC --> PRISMA["schema.prisma"]
APP["app.ts"] --> CTRL
图表来源
章节来源
章节来源
章节来源
当前评论功能实现了基础的“按章节读取评论列表”和“发表评论”能力,具备清晰的数据模型与安全前置防护。若需支持回复、审核、内容过滤与评分统计等高级特性,可在现有基础上扩展模型字段与服务方法,并完善前端交互与后台管理界面。