本文引用的文件
本文件为评论系统的完整技术文档,覆盖评论发布、查看、嵌套回复、点赞、删除等核心能力;详述评论数据模型设计、嵌套回复结构、评论审核机制;包含内容过滤、敏感词检测、违规处理流程;解释评论排序算法、热度计算、推荐展示机制;提供完整的评论 API 接口文档,涵盖评论树结构、分页查询、实时更新;包含评论统计、用户互动分析、社区治理机制;解释评论与内容系统的关联方式、通知推送、数据缓存策略;并给出评论安全防护、防刷机制、内容版权保护措施。
当前仓库中的评论模块处于基础实现阶段,支持按章节获取评论与发布评论,尚未包含嵌套回复、点赞、删除、审核、敏感词检测、热度/推荐等高级能力。本文在现有代码基础上,提出扩展方案与最佳实践,帮助团队在后续迭代中完善评论系统。
评论系统位于后端服务的模块化结构中,采用 Koa + Prisma + Redis 的技术栈,路由注册于应用入口,控制器负责接口定义,服务层封装业务逻辑,Prisma 管理数据库模型,Redis 提供缓存与限流能力。
graph TB
subgraph "应用入口"
APP["app.ts<br/>注册路由与中间件"]
end
subgraph "评论模块"
CTRL["comments.controller.ts<br/>路由与控制器"]
SVC["comments.service.ts<br/>业务服务"]
end
subgraph "数据层"
PRISMA["schema.prisma<br/>Comment/BookChapter/User 模型"]
MODELS["models/index.ts<br/>Prisma 客户端"]
end
subgraph "安全与限流"
SEC["security.ts<br/>XSS/SQL 注入防护"]
RL["rate-limiter.ts<br/>限流中间件"]
end
subgraph "缓存"
REDIS["redis.service.ts<br/>Redis 服务"]
end
APP --> CTRL
CTRL --> SVC
SVC --> MODELS
MODELS --> PRISMA
APP --> SEC
APP --> RL
APP --> REDIS
图表来源
章节来源
章节来源
评论系统采用典型的 MVC 架构,控制器负责接收请求与返回响应,服务层封装业务逻辑,数据层通过 Prisma ORM 访问 MySQL。应用入口集中注册路由与中间件,安全与限流中间件贯穿请求链路,Redis 作为缓存与限流存储。
sequenceDiagram
participant C as "客户端"
participant R as "Koa 路由<br/>comments.controller.ts"
participant S as "评论服务<br/>comments.service.ts"
participant M as "Prisma 客户端<br/>models/index.ts"
participant DB as "MySQL"
C->>R : "GET /api/comments/ : chapterId"
R->>S : "getCommentsByChapterId(chapterId)"
S->>M : "comment.findMany(where, orderBy)"
M->>DB : "执行查询"
DB-->>M : "返回结果"
M-->>S : "评论列表"
S-->>R : "评论列表"
R-->>C : "JSON 响应"
Note over C,R : "新增评论流程类似,POST /api/comments"
图表来源
User 模型:包含用户信息,与 Comment 建立一对多关系。
erDiagram
USER {
int id PK
string phone
string openid
string nickname
string avatar
int memberLevel
datetime createdAt
datetime updatedAt
}
BOOKCHAPTER {
int id PK
int bookId
int parentId
int level
int number
string title
int estimatedWords
int wordCount
boolean isPublic
datetime createdAt
datetime updatedAt
}
COMMENT {
int id PK
int userId FK
int chapterId FK
text content
int rating
datetime createdAt
}
USER ||--o{ COMMENT : "发表"
BOOKCHAPTER ||--o{ COMMENT : "拥有"
图表来源
章节来源
服务层:使用 Prisma 查询与插入评论,支持按章节查询与新增评论。
classDiagram
class CommentsController {
+GET "/api/comments/ : chapterId"
+POST "/api/comments"
}
class CommentsService {
+getCommentsByChapterId(chapterId)
+addComment(userId, chapterId, content, rating)
}
class PrismaClient {
+comment.findMany()
+comment.create()
}
CommentsController --> CommentsService : "调用"
CommentsService --> PrismaClient : "使用"
图表来源
章节来源
章节来源
当前实现未包含嵌套回复字段与层级关系。建议在 Comment 模型中增加 parentCommentId、level、threadId 等字段,以支持回复树结构与层级管理。
章节来源
当前实现未包含审核字段与审核流程。建议引入审核状态字段(如 pending、approved、rejected),并结合敏感词检测与人工审核流程。
章节来源
当前实现未包含敏感词检测。建议在服务层新增内容过滤步骤,调用敏感词检测服务并在必要时阻断或标记。
章节来源
章节来源
章节来源
章节来源
章节来源
Redis 作为可选依赖,用于缓存与限流。
graph LR
CTRL["comments.controller.ts"] --> SVC["comments.service.ts"]
SVC --> MODELS["models/index.ts"]
MODELS --> PRISMA["schema.prisma"]
APP["app.ts"] --> CTRL
APP --> SEC["security.ts"]
APP --> RL["rate-limiter.ts"]
APP --> REDIS["redis.service.ts"]
图表来源
章节来源
章节来源
章节来源
当前评论系统具备基础的评论查询与发布能力,数据模型清晰,安全与限流中间件已就绪。建议在下一阶段引入嵌套回复、审核机制、敏感词检测、热度与推荐、通知推送与缓存策略,以构建完整的评论生态。同时完善分页查询、实时更新与社区治理能力,提升用户体验与平台治理水平。
章节来源