# 内容管理系统
**本文引用的文件**
- [server\src\modules\search\search.service.ts](file://server\src\modules\search\search.service.ts)
- [server\src\modules\search\search.controller.ts](file://server\src\modules\search\search.controller.ts)
- [server\prisma\schema.prisma](file://server\prisma\schema.prisma)
- [server\src\models\index.ts](file://server\src\models\index.ts)
- [server\src\modules\history\history.controller.ts](file://server\src\modules\history\history.controller.ts)
- [server\src\modules\history\history-batch.controller.ts](file://server\src\modules\history\history-batch.controller.ts)
- [server\src\modules\comments\comments.service.ts](file://server\src\modules\comments\comments.service.ts)
- [server\src\modules\comments\comments.controller.ts](file://server\src\modules\comments\comments.controller.ts)
- [server\src\modules\favorites\favorites.service.ts](file://server\src\modules\favorites\favorites.service.ts)
- [server\src\modules\categories\categories.service.ts](file://server\src\modules\categories\categories.service.ts)
- [server\src\middleware\cache.ts](file://server\src\middleware\cache.ts)
- [server\src\services\redis.service.ts](file://server\src\services\redis.service.ts)
- [server\src\modules\preferences\preferences.service.ts](file://server\src\modules\preferences\preferences.service.ts)
- [my-uniapp-vue3\src\pages\favorites\index.vue](file://my-uniapp-vue3\src\pages\favorites\index.vue)
- [server\src\middleware\errorHandler.js](file://server\src\middleware\errorHandler.js)
- [server\src\services\log.service.ts](file://server\src\services\log.service.ts)
- [feature_list_optimization.json](file://feature_list_optimization.json)
- [feature_list_content_generate.json](file://feature_list_content_generate.json)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本技术文档面向内容管理系统(音频/有声书方向),围绕收藏、历史记录、评论系统、搜索与索引、内容分类与标签、推荐与个性化、用户行为追踪与分析、审核与版权保护、缓存与CDN、静态资源管理、扩展开发与监控等主题,提供从架构到实现细节的系统化说明,并配套API接口文档与数据模型说明。
## 项目结构
后端采用 Koa + Prisma 架构,模块化组织业务功能;前端基于 uniapp-vue3。核心模块包括搜索、历史、评论、收藏、分类、偏好设置、缓存中间件与 Redis 服务等。
```mermaid
graph TB
subgraph "前端"
FE_Favorites["收藏页面
favorites/index.vue"]
end
subgraph "后端"
API_Search["搜索控制器
search.controller.ts"]
API_History["历史控制器
history.controller.ts"]
API_Comments["评论控制器
comments.controller.ts"]
API_Favorites["收藏服务
favorites.service.ts"]
API_Categories["分类服务
categories.service.ts"]
API_Preferences["偏好服务
preferences.service.ts"]
Svc_Search["搜索服务
search.service.ts"]
Svc_History["历史服务
history.controller.ts"]
Svc_Comments["评论服务
comments.service.ts"]
Svc_Favorites["收藏服务
favorites.service.ts"]
Svc_Categories["分类服务
categories.service.ts"]
Svc_Preferences["偏好服务
preferences.service.ts"]
MW_Cache["缓存中间件
cache.ts"]
Svc_Redis["Redis 服务
redis.service.ts"]
DB_Schema["Prisma Schema
schema.prisma"]
DB_Connect["数据库连接
models/index.ts"]
end
FE_Favorites --> API_Favorites
API_Search --> Svc_Search
API_History --> Svc_History
API_Comments --> Svc_Comments
API_Favorites --> Svc_Favorites
API_Categories --> Svc_Categories
API_Preferences --> Svc_Preferences
Svc_Search --> DB_Schema
Svc_History --> DB_Schema
Svc_Comments --> DB_Schema
Svc_Favorites --> DB_Schema
Svc_Categories --> DB_Schema
Svc_Preferences --> DB_Schema
MW_Cache --> Svc_Redis
Svc_Redis --> DB_Schema
DB_Connect --> DB_Schema
```
图表来源
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\src\modules\history\history.controller.ts:1-67](file://server\src\modules\history\history.controller.ts#L1-L67)
- [server\src\modules\comments\comments.controller.ts:1-58](file://server\src\modules\comments\comments.controller.ts#L1-L58)
- [server\src\modules\favorites\favorites.service.ts:1-103](file://server\src\modules\favorites\favorites.service.ts#L1-L103)
- [server\src\modules\categories\categories.service.ts:1-65](file://server\src\modules\categories\categories.service.ts#L1-L65)
- [server\src\modules\preferences\preferences.service.ts:1-74](file://server\src\modules\preferences\preferences.service.ts#L1-L74)
- [server\src\middleware\cache.ts:1-98](file://server\src\middleware\cache.ts#L1-L98)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
- [server\prisma\schema.prisma:1-472](file://server\prisma\schema.prisma#L1-L472)
- [server\src\models\index.ts:1-15](file://server\src\models\index.ts#L1-L15)
章节来源
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\src\modules\history\history.controller.ts:1-67](file://server\src\modules\history\history.controller.ts#L1-L67)
- [server\src\modules\comments\comments.controller.ts:1-58](file://server\src\modules\comments\comments.controller.ts#L1-L58)
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\prisma\schema.prisma:1-472](file://server\prisma\schema.prisma#L1-L472)
## 核心组件
- 搜索与索引:提供全局搜索、热门词、搜索历史持久化与去重、历史上限控制与热门词计数更新。
- 历史记录:分页查询音频生成历史,支持批量删除。
- 评论系统:按章节获取评论、添加评论。
- 收藏功能:用户对书籍的收藏、取消收藏、查询收藏列表、判断是否已收藏。
- 分类与标签:音频分类(当前返回默认分类映射)、分类标签映射。
- 偏好设置:播放速度、音质、主题、默认音色、音量、自动下一首、仅WiFi下载等。
- 缓存与Redis:统一缓存中间件、常用键空间、失效策略。
- 错误处理与日志:通用错误中间件、日志清理与智能建议。
章节来源
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\src\modules\history\history.controller.ts:1-67](file://server\src\modules\history\history.controller.ts#L1-L67)
- [server\src\modules\history\history-batch.controller.ts:1-105](file://server\src\modules\history\history-batch.controller.ts#L1-L105)
- [server\src\modules\comments\comments.service.ts:1-32](file://server\src\modules\comments\comments.service.ts#L1-L32)
- [server\src\modules\comments\comments.controller.ts:1-58](file://server\src\modules\comments\comments.controller.ts#L1-L58)
- [server\src\modules\favorites\favorites.service.ts:1-103](file://server\src\modules\favorites\favorites.service.ts#L1-L103)
- [server\src\modules\categories\categories.service.ts:1-65](file://server\src\modules\categories\categories.service.ts#L1-L65)
- [server\src\modules\preferences\preferences.service.ts:1-74](file://server\src\modules\preferences\preferences.service.ts#L1-L74)
- [server\src\middleware\cache.ts:1-98](file://server\src\middleware\cache.ts#L1-L98)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
- [server\src\middleware\errorHandler.js:1-24](file://server\src\middleware\errorHandler.js#L1-L24)
- [server\src\services\log.service.ts:277-315](file://server\src\services\log.service.ts#L277-L315)
## 架构总览
系统采用前后端分离,后端以 Koa 路由聚合各模块服务,数据访问通过 Prisma ORM,缓存层基于 Redis。前端 uniapp-vue3 通过 HTTP API 与后端交互。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Router as "Koa 路由"
participant Ctrl as "控制器"
participant Svc as "服务层"
participant Prisma as "Prisma ORM"
participant DB as "MySQL"
Client->>Router : "HTTP 请求"
Router->>Ctrl : "路由分发"
Ctrl->>Svc : "调用业务方法"
Svc->>Prisma : "构建查询/写入"
Prisma->>DB : "SQL 执行"
DB-->>Prisma : "结果集"
Prisma-->>Svc : "实体/集合"
Svc-->>Ctrl : "业务结果"
Ctrl-->>Client : "JSON 响应"
```
图表来源
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\prisma\schema.prisma:1-472](file://server\prisma\schema.prisma#L1-L472)
## 详细组件分析
### 搜索与索引
- 功能要点
- 全局搜索:按标题或描述模糊匹配,按创建时间倒序,限制返回条数。
- 热门搜索词:多字段排序,限制返回条数。
- 搜索历史:按用户去重、保留最新记录、限制最大条数;同时更新热门词计数。
- 历史清理:支持按用户清空、按关键词删除单条。
- 索引策略
- 搜索关键词在标题/描述上具备模糊匹配能力;热门词与搜索历史具备复合索引,保证查询效率。
- 排序算法
- 热门词优先级:先按 sort 降序,再按 count 降序;搜索结果按创建时间倒序。
- 前端优化
- 搜索结果关键词高亮(前端特性清单中已确认)。
```mermaid
flowchart TD
Start(["开始"]) --> QEmpty{"关键词为空?"}
QEmpty --> |是| ReturnEmpty["返回空结果"]
QEmpty --> |否| BuildQuery["构造模糊查询
标题/描述 contains"]
BuildQuery --> ExecFind["执行查询并排序"]
ExecFind --> Limit["限制返回条数"]
Limit --> ReturnResults["返回结果"]
subgraph "历史与热门词"
SaveHist["保存历史
去重+上限控制"]
UpdateHot["更新热门词计数"]
SaveHist --> UpdateHot
end
```
图表来源
- [server\src\modules\search\search.service.ts:13-141](file://server\src\modules\search\search.service.ts#L13-L141)
- [server\prisma\schema.prisma:222-242](file://server\prisma\schema.prisma#L222-L242)
章节来源
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\prisma\schema.prisma:222-242](file://server\prisma\schema.prisma#L222-L242)
- [feature_list_optimization.json:1-39](file://feature_list_optimization.json#L1-L39)
### 历史记录管理
- 功能要点
- 分页查询音频生成历史,支持按起始日期过滤。
- 批量删除历史记录(POST/DELETE 兼容)。
- 数据模型
- 历史记录存储于 AudioRecord,包含音频标识、标题、文本、时长、大小、状态、语音参数、关联书籍等。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Router as "历史路由"
participant Ctrl as "历史控制器"
participant Prisma as "Prisma"
participant DB as "MySQL"
Client->>Router : "GET /api/history?page=...&pageSize=..."
Router->>Ctrl : "解析分页与过滤条件"
Ctrl->>Prisma : "查询记录+总数"
Prisma->>DB : "SQL 查询"
DB-->>Prisma : "记录集"
Prisma-->>Ctrl : "组装列表"
Ctrl-->>Client : "分页结果"
```
图表来源
- [server\src\modules\history\history.controller.ts:10-64](file://server\src\modules\history\history.controller.ts#L10-L64)
- [server\prisma\schema.prisma:354-375](file://server\prisma\schema.prisma#L354-L375)
章节来源
- [server\src\modules\history\history.controller.ts:1-67](file://server\src\modules\history\history.controller.ts#L1-L67)
- [server\src\modules\history\history-batch.controller.ts:1-105](file://server\src\modules\history\history-batch.controller.ts#L1-L105)
- [server\prisma\schema.prisma:354-375](file://server\prisma\schema.prisma#L354-L375)
### 评论系统架构
- 功能要点
- 按章节获取评论,按创建时间倒序。
- 添加评论(含评分)。
- 数据模型
- 评论与章节、用户建立关系,支持章节维度的评论统计与展示。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Router as "评论路由"
participant Ctrl as "评论控制器"
participant Svc as "评论服务"
participant Prisma as "Prisma"
participant DB as "MySQL"
Client->>Router : "GET /api/comments/ : chapterId"
Router->>Ctrl : "解析章节ID"
Ctrl->>Svc : "查询评论"
Svc->>Prisma : "findMany(chapterId)"
Prisma->>DB : "SQL 查询"
DB-->>Prisma : "评论列表"
Prisma-->>Svc : "结果"
Svc-->>Ctrl : "返回列表"
Ctrl-->>Client : "JSON 响应"
Client->>Router : "POST /api/comments"
Router->>Ctrl : "解析请求体"
Ctrl->>Svc : "新增评论"
Svc->>Prisma : "create(comment)"
Prisma->>DB : "SQL 插入"
DB-->>Prisma : "新记录"
Prisma-->>Svc : "结果"
Svc-->>Ctrl : "返回评论"
Ctrl-->>Client : "JSON 响应"
```
图表来源
- [server\src\modules\comments\comments.controller.ts:13-56](file://server\src\modules\comments\comments.controller.ts#L13-L56)
- [server\src\modules\comments\comments.service.ts:10-30](file://server\src\modules\comments\comments.service.ts#L10-L30)
- [server\prisma\schema.prisma:107-119](file://server\prisma\schema.prisma#L107-L119)
章节来源
- [server\src\modules\comments\comments.controller.ts:1-58](file://server\src\modules\comments\comments.controller.ts#L1-L58)
- [server\src\modules\comments\comments.service.ts:1-32](file://server\src\modules\comments\comments.service.ts#L1-L32)
- [server\prisma\schema.prisma:107-119](file://server\prisma\schema.prisma#L107-L119)
### 收藏功能实现
- 功能要点
- 获取收藏列表(包含书籍信息),按收藏时间倒序。
- 添加收藏(幂等:重复收藏直接返回现有记录)。
- 取消收藏与判断是否已收藏。
- 前端集成
- 收藏页面展示收藏列表,支持取消收藏操作。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Router as "收藏路由"
participant Svc as "收藏服务"
participant Prisma as "Prisma"
participant DB as "MySQL"
Client->>Router : "GET /api/favorites"
Router->>Svc : "查询收藏列表"
Svc->>Prisma : "findMany(include book)"
Prisma->>DB : "SQL 查询"
DB-->>Prisma : "收藏+书籍"
Prisma-->>Svc : "结果"
Svc-->>Router : "返回收藏列表"
Router-->>Client : "JSON 响应"
Client->>Router : "POST /api/favorites"
Router->>Svc : "添加收藏"
Svc->>Prisma : "upsert(去重)+create"
Prisma->>DB : "SQL 写入"
DB-->>Prisma : "新记录"
Prisma-->>Svc : "结果"
Svc-->>Router : "返回收藏"
Router-->>Client : "JSON 响应"
```
图表来源
- [server\src\modules\favorites\favorites.service.ts:8-103](file://server\src\modules\favorites\favorites.service.ts#L8-L103)
- [my-uniapp-vue3\src\pages\favorites\index.vue:25-43](file://my-uniapp-vue3\src\pages\favorites\index.vue#L25-L43)
- [server\prisma\schema.prisma:94-105](file://server\prisma\schema.prisma#L94-L105)
章节来源
- [server\src\modules\favorites\favorites.service.ts:1-103](file://server\src\modules\favorites\favorites.service.ts#L1-L103)
- [my-uniapp-vue3\src\pages\favorites\index.vue:1-45](file://my-uniapp-vue3\src\pages\favorites\index.vue#L1-L45)
- [server\prisma\schema.prisma:94-105](file://server\prisma\schema.prisma#L94-L105)
### 内容分类与标签系统
- 当前实现
- 返回预设分类(默认映射),音频分类接口暂不可用(Audio 表已删除)。
- 提供分类到标签的映射方法。
- 设计建议
- 引入 BookCategory/BookTag 模型,建立书籍与标签的多对多关系,支持动态分类与标签管理。
```mermaid
classDiagram
class CategoriesService {
+getCategories()
+getAudiosByCategory(categoryId, page, pageSize)
-getAllAudios(page, pageSize)
-getCategoryTag(categoryId) string
}
class Book {
+int id
+string title
+string description
}
class BookChapter {
+int id
+int bookId
+string title
+string audioUrl
}
CategoriesService --> Book : "默认分类映射"
Book --> BookChapter : "包含章节"
```
图表来源
- [server\src\modules\categories\categories.service.ts:1-65](file://server\src\modules\categories\categories.service.ts#L1-L65)
- [server\prisma\schema.prisma:130-194](file://server\prisma\schema.prisma#L130-L194)
章节来源
- [server\src\modules\categories\categories.service.ts:1-65](file://server\src\modules\categories\categories.service.ts#L1-L65)
- [server\prisma\schema.prisma:130-194](file://server\prisma\schema.prisma#L130-L194)
### 个性化推荐与用户偏好
- 偏好设置
- 默认值:播放速度、音质、主题、默认音色、音量、自动下一首、仅WiFi下载。
- 通过 upsert 保证用户偏好存在性。
- 推荐机制
- 当前仓库未提供推荐算法实现,建议结合播放记录、收藏、评分、搜索历史构建协同过滤或内容基础推荐。
章节来源
- [server\src\modules\preferences\preferences.service.ts:8-73](file://server\src\modules\preferences\preferences.service.ts#L8-L73)
- [server\prisma\schema.prisma:79-92](file://server\prisma\schema.prisma#L79-L92)
### 用户行为追踪与数据分析
- 行为采集
- 播放进度与时长记录于 PlayRecord,可用于分析用户偏好与完播率。
- 数据分析
- 建议基于 PlayRecord、SearchHistory、Comment、Favorite 等数据构建用户画像与行为趋势。
章节来源
- [server\prisma\schema.prisma:63-77](file://server\prisma\schema.prisma#L63-L77)
- [server\prisma\schema.prisma:222-230](file://server\prisma\schema.prisma#L222-L230)
### 内容审核与版权保护
- 敏感词检测
- 仓库提供敏感词检测与词库接口(前端特性清单中已确认),可用于生成内容的实时检测与拦截。
- 版权保护
- 建议结合水印、访问控制、内容加密与平台发布规范,配合审核流程实现。
章节来源
- [feature_list_content_generate.json:236-269](file://feature_list_content_generate.json#L236-L269)
### 缓存策略与CDN集成
- 缓存中间件
- 统一缓存中间件支持 TTL、键前缀、自定义键生成器;提供常用键空间:用户信息、音色列表、书籍详情、热门书籍、会员权益。
- Redis 服务
- 提供 get/set/getJSON/setJSON/del/delPattern/hset/hget/hgetall/incr/expire/exist/test/disconnect 等能力。
- CDN 集成
- 建议对音频/图片等静态资源走 CDN,结合缓存中间件与 ETag/Last-Modified 实现边缘缓存。
```mermaid
graph LR
C["客户端"] --> M["缓存中间件
cache.ts"]
M --> R["Redis 服务
redis.service.ts"]
R --> D["Redis 缓存"]
M --> N["下游服务"]
```
图表来源
- [server\src\middleware\cache.ts:13-98](file://server\src\middleware\cache.ts#L13-L98)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
章节来源
- [server\src\middleware\cache.ts:1-98](file://server\src\middleware\cache.ts#L1-L98)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
### 静态资源管理
- 建议
- 将音频、封面图等静态资源托管至对象存储(OSS/MinIO)并开启 CDN;前端通过 CDN URL 访问,减少源站压力。
- 与缓存中间件结合,对元数据与列表页进行缓存。
## 依赖关系分析
```mermaid
graph TB
A["search.controller.ts"] --> B["search.service.ts"]
C["history.controller.ts"] --> D["schema.prisma"]
E["comments.controller.ts"] --> F["comments.service.ts"]
G["favorites.service.ts"] --> D
H["categories.service.ts"] --> D
I["preferences.service.ts"] --> D
J["cache.ts"] --> K["redis.service.ts"]
L["models/index.ts"] --> D
```
图表来源
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\src\modules\history\history.controller.ts:1-67](file://server\src\modules\history\history.controller.ts#L1-L67)
- [server\src\modules\comments\comments.controller.ts:1-58](file://server\src\modules\comments\comments.controller.ts#L1-L58)
- [server\src\modules\comments\comments.service.ts:1-32](file://server\src\modules\comments\comments.service.ts#L1-L32)
- [server\src\modules\favorites\favorites.service.ts:1-103](file://server\src\modules\favorites\favorites.service.ts#L1-L103)
- [server\src\modules\categories\categories.service.ts:1-65](file://server\src\modules\categories\categories.service.ts#L1-L65)
- [server\src\modules\preferences\preferences.service.ts:1-74](file://server\src\modules\preferences\preferences.service.ts#L1-L74)
- [server\src\middleware\cache.ts:1-98](file://server\src\middleware\cache.ts#L1-L98)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
- [server\src\models\index.ts:1-15](file://server\src\models\index.ts#L1-L15)
- [server\prisma\schema.prisma:1-472](file://server\prisma\schema.prisma#L1-L472)
章节来源
- [server\src\modules\search\search.controller.ts:1-170](file://server\src\modules\search\search.controller.ts#L1-L170)
- [server\src\modules\search\search.service.ts:1-145](file://server\src\modules\search\search.service.ts#L1-L145)
- [server\prisma\schema.prisma:1-472](file://server\prisma\schema.prisma#L1-L472)
## 性能考虑
- 查询优化
- 为高频查询字段建立索引(如 SearchHistory.userId、HotSearch.sort/count、AudioRecord.userId/audioId/bookId 等)。
- 分页与限制
- 搜索与历史查询均限制返回条数,避免一次性返回大量数据。
- 缓存策略
- 对热点数据(书籍详情、热门书籍、音色列表、用户偏好)设置合理 TTL,降低数据库压力。
- 并发与事务
- 收藏添加采用幂等写入,避免重复插入;批量删除使用 in 查询,减少多次往返。
## 故障排查指南
- 错误处理
- 通用错误中间件捕获异常并返回标准化响应。
- 日志与诊断
- 日志服务支持错误模式匹配与通用建议输出,提供日志清理能力。
- Redis 连接
- Redis 服务内置重连策略与连接状态检测,便于快速定位缓存不可用问题。
章节来源
- [server\src\middleware\errorHandler.js:1-24](file://server\src\middleware\errorHandler.js#L1-L24)
- [server\src\services\log.service.ts:277-315](file://server\src\services\log.service.ts#L277-L315)
- [server\src\services\redis.service.ts:1-274](file://server\src\services\redis.service.ts#L1-L274)
## 结论
本系统在搜索、历史、评论、收藏、分类与偏好等方面提供了清晰的模块化实现,并通过 Prisma 与 Redis 构建了可扩展的数据与缓存层。后续可在推荐算法、内容审核与版权保护、CDN 与静态资源管理方面进一步完善,以提升用户体验与平台安全性。
## 附录
### API 接口文档
- 搜索
- GET /api/search?q=关键词&limit=数值
- GET /api/search/hot?limit=数值
- GET /api/search/history?userId=数值&limit=数值
- POST /api/search/history { userId, keyword }
- DELETE /api/search/history?userId=数值&keyword=关键词
- DELETE /api/search/history/all?userId=数值
- 历史
- GET /api/history?page=数值&pageSize=数值&startDate=日期
- POST /api/history/batch-delete { ids: string[] }
- DELETE /api/history/batch(兼容)
- 评论
- GET /api/comments/:chapterId
- POST /api/comments { chapterId, content, rating }
- 收藏
- GET /api/favorites
- POST /api/favorites { userId, bookId }
- DELETE /api/favorites/{userId}/{bookId}
- 分类
- GET /api/categories
- 偏好
- GET /api/preferences?userId=数值
- POST /api/preferences { userId, ...偏好字段 }
章节来源
- [server\src\modules\search\search.controller.ts:10-169](file://server\src\modules\search\search.controller.ts#L10-L169)
- [server\src\modules\history\history.controller.ts:11-64](file://server\src\modules\history\history.controller.ts#L11-L64)
- [server\src\modules\history\history-batch.controller.ts:11-102](file://server\src\modules\history\history-batch.controller.ts#L11-L102)
- [server\src\modules\comments\comments.controller.ts:13-56](file://server\src\modules\comments\comments.controller.ts#L13-L56)
- [server\src\modules\favorites\favorites.service.ts:8-103](file://server\src\modules\favorites\favorites.service.ts#L8-L103)
- [server\src\modules\categories\categories.service.ts:10-20](file://server\src\modules\categories\categories.service.ts#L10-L20)
- [server\src\modules\preferences\preferences.service.ts:8-73](file://server\src\modules\preferences\preferences.service.ts#L8-L73)
### 数据模型说明
```mermaid
erDiagram
USER ||--o{ COMMENT : "发表"
USER ||--o{ FAVORITE : "收藏"
USER ||--o{ AUDIO_RECORD : "生成"
BOOK ||--o{ BOOK_CHAPTER : "包含"
BOOK ||--o{ FAVORITE : "被收藏"
BOOK_CHAPTER ||--o{ COMMENT : "被评论"
BOOK_CHAPTER ||--o{ PLAY_RECORD : "被播放"
USER ||--o{ PLAY_RECORD : "产生记录"
```
图表来源
- [server\prisma\schema.prisma:10-472](file://server\prisma\schema.prisma#L10-L472)
### 扩展开发指南
- 新增模块
- 在 server/src/modules 下创建控制器与服务,遵循现有命名与导出约定。
- 在 Prisma schema 中定义数据模型并生成客户端。
- 在 app.ts 中挂载路由。
- 自定义缓存
- 使用 createCache/clearCache 定义键空间与 TTL,确保命中率与一致性。
- 监控指标
- 建议埋点:搜索请求量/成功率、历史批量删除次数、收藏/取消收藏频次、评论提交数、播放完成率等。