本文引用的文件
本技术文档面向内容管理系统(音频/有声书方向),围绕收藏、历史记录、评论系统、搜索与索引、内容分类与标签、推荐与个性化、用户行为追踪与分析、审核与版权保护、缓存与CDN、静态资源管理、扩展开发与监控等主题,提供从架构到实现细节的系统化说明,并配套API接口文档与数据模型说明。
后端采用 Koa + Prisma 架构,模块化组织业务功能;前端基于 uniapp-vue3。核心模块包括搜索、历史、评论、收藏、分类、偏好设置、缓存中间件与 Redis 服务等。
graph TB
subgraph "前端"
FE_Favorites["收藏页面<br/>favorites/index.vue"]
end
subgraph "后端"
API_Search["搜索控制器<br/>search.controller.ts"]
API_History["历史控制器<br/>history.controller.ts"]
API_Comments["评论控制器<br/>comments.controller.ts"]
API_Favorites["收藏服务<br/>favorites.service.ts"]
API_Categories["分类服务<br/>categories.service.ts"]
API_Preferences["偏好服务<br/>preferences.service.ts"]
Svc_Search["搜索服务<br/>search.service.ts"]
Svc_History["历史服务<br/>history.controller.ts"]
Svc_Comments["评论服务<br/>comments.service.ts"]
Svc_Favorites["收藏服务<br/>favorites.service.ts"]
Svc_Categories["分类服务<br/>categories.service.ts"]
Svc_Preferences["偏好服务<br/>preferences.service.ts"]
MW_Cache["缓存中间件<br/>cache.ts"]
Svc_Redis["Redis 服务<br/>redis.service.ts"]
DB_Schema["Prisma Schema<br/>schema.prisma"]
DB_Connect["数据库连接<br/>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
图表来源
章节来源
章节来源
系统采用前后端分离,后端以 Koa 路由聚合各模块服务,数据访问通过 Prisma ORM,缓存层基于 Redis。前端 uniapp-vue3 通过 HTTP API 与后端交互。
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 响应"
图表来源
前端优化
搜索结果关键词高亮(前端特性清单中已确认)。
flowchart TD
Start(["开始"]) --> QEmpty{"关键词为空?"}
QEmpty --> |是| ReturnEmpty["返回空结果"]
QEmpty --> |否| BuildQuery["构造模糊查询<br/>标题/描述 contains"]
BuildQuery --> ExecFind["执行查询并排序"]
ExecFind --> Limit["限制返回条数"]
Limit --> ReturnResults["返回结果"]
subgraph "历史与热门词"
SaveHist["保存历史<br/>去重+上限控制"]
UpdateHot["更新热门词计数"]
SaveHist --> UpdateHot
end
图表来源
章节来源
数据模型
历史记录存储于 AudioRecord,包含音频标识、标题、文本、时长、大小、状态、语音参数、关联书籍等。
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 : "分页结果"
图表来源
章节来源
数据模型
评论与章节、用户建立关系,支持章节维度的评论统计与展示。
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 响应"
图表来源
章节来源
前端集成
收藏页面展示收藏列表,支持取消收藏操作。
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 响应"
图表来源
章节来源
设计建议
引入 BookCategory/BookTag 模型,建立书籍与标签的多对多关系,支持动态分类与标签管理。
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 : "包含章节"
图表来源
章节来源
章节来源
章节来源
章节来源
CDN 集成
建议对音频/图片等静态资源走 CDN,结合缓存中间件与 ETag/Last-Modified 实现边缘缓存。
graph LR
C["客户端"] --> M["缓存中间件<br/>cache.ts"]
M --> R["Redis 服务<br/>redis.service.ts"]
R --> D["Redis 缓存"]
M --> N["下游服务"]
图表来源
章节来源
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
图表来源
章节来源
章节来源
本系统在搜索、历史、评论、收藏、分类与偏好等方面提供了清晰的模块化实现,并通过 Prisma 与 Redis 构建了可扩展的数据与缓存层。后续可在推荐算法、内容审核与版权保护、CDN 与静态资源管理方面进一步完善,以提升用户体验与平台安全性。
搜索
历史
评论
收藏
分类
偏好
章节来源
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 : "产生记录"
图表来源