本文档引用的文件
本文件面向AI有声书生成平台的交互数据模型,聚焦用户行为数据的设计与实现,包括收藏管理、评论系统、播放记录、搜索历史等关键功能。文档从数据库模型出发,结合控制器与服务层实现,梳理前后端交互流程,并给出API使用示例与最佳实践,帮助开发者快速理解与扩展相关能力。
围绕交互数据模型的关键目录与文件如下:
批量删除功能补充:6个新功能最终完成包.md
graph TB
subgraph "前端"
FE_Fav["收藏页面<br/>favorites/index.vue"]
FE_Hist["历史页面<br/>history/index.vue"]
FE_Search["搜索页面<br/>search/index.vue"]
end
subgraph "后端"
C_Fav["收藏控制器<br/>favorites.controller.ts"]
S_Fav["收藏服务<br/>favorites.service.ts"]
C_Com["评论控制器<br/>comments.controller.ts"]
S_Com["评论服务<br/>comments.service.ts"]
S_Player["播放服务<br/>player.service.ts"]
C_Search["搜索控制器<br/>search.controller.ts"]
S_Search["搜索服务<br/>search.service.ts"]
C_Hist["历史控制器<br/>history.controller.ts"]
end
DB["数据库模型<br/>schema.prisma"]
FE_Fav --> C_Fav --> S_Fav --> DB
FE_Hist --> C_Hist --> DB
FE_Search --> C_Search --> S_Search --> DB
FE_Fav -.-> C_Com --> S_Com --> DB
FE_Fav -.-> S_Player --> DB
FE_Search -.-> S_Player --> DB
图表来源
章节来源
本节概述与交互数据模型直接相关的数据表与业务组件,以及它们在系统中的职责。
章节来源
交互数据模型的架构由“前端页面 → 控制器 → 服务层 → 数据库模型”构成,各模块职责清晰、耦合度低,便于扩展与维护。
sequenceDiagram
participant FE as "前端页面"
participant CTRL as "控制器"
participant SVC as "服务层"
participant DB as "数据库模型"
FE->>CTRL : 触发交互请求如收藏/评论/播放/搜索
CTRL->>SVC : 解析参数并调用业务方法
SVC->>DB : 查询/插入/更新/删除数据
DB-->>SVC : 返回数据结果
SVC-->>CTRL : 格式化响应数据
CTRL-->>FE : 返回JSON响应code/message/data
图表来源
前端交互
播放器页面可显示收藏状态并提供收藏/取消操作入口。
sequenceDiagram
participant FE as "前端收藏页面"
participant CTRL as "收藏控制器"
participant SVC as "收藏服务"
participant DB as "数据库(Favorite)"
FE->>CTRL : POST /api/favorites传入audioId
CTRL->>SVC : addFavorite(userId, audioId)
SVC->>DB : upsert唯一键:userId+bookId
DB-->>SVC : 返回收藏记录
SVC-->>CTRL : 格式化数据
CTRL-->>FE : {code,message,data}
图表来源
章节来源
业务流程
发表评论:校验参数后创建评论记录。
sequenceDiagram
participant FE as "前端播放器/章节详情"
participant CTRL as "评论控制器"
participant SVC as "评论服务"
participant DB as "数据库(Comment)"
FE->>CTRL : GET /api/comments/ : chapterId
CTRL->>SVC : getCommentsByChapterId(chapterId)
SVC->>DB : findMany(where : { chapterId })
DB-->>SVC : 返回评论列表
SVC-->>CTRL : 格式化数据
CTRL-->>FE : {code,message,data}
FE->>CTRL : POST /api/commentscontent,rating
CTRL->>SVC : addComment(userId, chapterId, content, rating)
SVC->>DB : create(comment)
DB-->>SVC : 返回新建评论
SVC-->>CTRL : 格式化数据
CTRL-->>FE : {code,message,data}
图表来源
章节来源
前端交互
播放器定时上报进度,页面切换时保存最新进度,续播时读取上次进度。
sequenceDiagram
participant FE as "前端播放器"
participant SVC as "播放服务"
participant DB as "数据库(PlayRecord)"
FE->>SVC : savePlayProgress(userId, chapterId, progress, duration)
SVC->>DB : upsert唯一键:userId+chapterId
DB-->>SVC : 返回记录
SVC-->>FE : 成功
FE->>SVC : getRecentPlayRecords(userId, limit)
SVC->>DB : findMany(include chapter.book, orderBy updatedAt desc)
DB-->>SVC : 返回记录列表
SVC-->>FE : 格式化进度百分比
图表来源
章节来源
业务流程
删除历史:支持单条删除与清空。
flowchart TD
Start(["保存搜索历史"]) --> Trim["去除空白字符"]
Trim --> Exists{"是否存在同用户同关键词记录?"}
Exists --> |是| DeleteOld["删除旧记录"]
Exists --> |否| SkipDelete["跳过删除"]
DeleteOld --> InsertNew["插入新记录"]
SkipDelete --> InsertNew
InsertNew --> LimitCheck{"历史总数是否超过20条?"}
LimitCheck --> |是| DeleteExtra["删除最旧记录"]
LimitCheck --> |否| KeepAll["保留全部"]
DeleteExtra --> UpdateHot["更新热门搜索词计数"]
KeepAll --> UpdateHot
UpdateHot --> End(["完成"])
图表来源
章节来源
业务流程
批量删除:新增批量删除接口,支持按ID集合删除。
sequenceDiagram
participant FE as "前端历史页面"
participant CTRL as "历史控制器"
participant DB as "数据库(AudioRecord)"
FE->>CTRL : GET /api/history?page&pageSize&startDate
CTRL->>DB : findMany(where : { createdAt >= startDate }, orderBy : createdAt desc)
DB-->>CTRL : 返回记录与总数
CTRL-->>FE : {code,message,{list,total,page,pageSize,totalPages}}
图表来源
章节来源
前后端依赖
播放服务与搜索服务在多个页面中被复用,体现良好的模块化设计。
erDiagram
USER ||--o{ FAVORITE : "收藏"
USER ||--o{ COMMENT : "发表评论"
USER ||--o{ PLAY_RECORD : "播放记录"
BOOK ||--o{ FAVORITE : "被收藏"
BOOKCHAPTER ||--o{ COMMENT : "被评论"
BOOKCHAPTER ||--o{ PLAY_RECORD : "被播放"
SEARCHHISTORY ||--|| USER : "属于"
HOTSEARCH ||--|| SEARCHHISTORY : "统计"
图表来源
章节来源
章节来源
章节来源
本交互数据模型围绕收藏、评论、播放记录与搜索历史四大核心功能构建,通过清晰的数据库模型、模块化的控制器与服务层以及友好的前端交互,实现了用户行为数据的采集、存储与分析。后续可在现有基础上扩展更多个性化功能(如评分反馈、搜索偏好分析、播放统计报表等),持续优化用户体验与平台运营效率。