本文档引用的文件
历史记录管理功能是本项目的重要组成部分,负责记录用户的播放历史、音频生成历史以及相关的播放进度跟踪。该功能实现了自动记录机制、历史列表查询、批量历史操作等功能,为用户提供便捷的历史记录管理和个性化体验。
本系统采用前后端分离架构,后端基于Koa框架,使用Prisma ORM进行数据库操作,前端采用UniApp框架构建跨平台应用。历史记录管理功能涵盖了播放历史记录、音频生成历史记录两大核心模块,并提供了完善的API接口和用户界面。
历史记录管理功能主要分布在以下模块中:
graph TB
subgraph "后端模块"
HC[历史控制器<br/>history.controller.ts]
HBC[批量历史控制器<br/>history-batch.controller.ts]
PC[播放器控制器<br/>player.controller.ts]
PS[播放器服务<br/>player.service.ts]
PRISMA[Prisma模型<br/>schema.prisma]
end
subgraph "前端模块"
HVUE[历史页面<br/>history/index.vue]
end
HC --> PRISMA
HBC --> PRISMA
PC --> PS
PS --> PRISMA
HVUE --> HC
HVUE --> HBC
图表来源
章节来源
历史记录管理功能包含以下核心组件:
系统采用两种主要的历史记录模型:
系统提供完整的RESTful API接口,支持历史记录的查询、批量操作等功能。
提供用户友好的历史记录管理界面,支持搜索、筛选、批量操作等功能。
章节来源
历史记录管理功能的整体架构如下:
sequenceDiagram
participant Client as 客户端
participant HistoryCtrl as 历史控制器
participant BatchCtrl as 批量控制器
participant PlayerCtrl as 播放器控制器
participant PlayerSvc as 播放器服务
participant DB as 数据库
Client->>HistoryCtrl : GET /api/history
HistoryCtrl->>DB : 查询音频历史记录
DB-->>HistoryCtrl : 返回历史记录列表
HistoryCtrl-->>Client : 历史记录数据
Client->>BatchCtrl : POST /api/history/batch-delete
BatchCtrl->>DB : 批量删除历史记录
DB-->>BatchCtrl : 返回删除结果
BatchCtrl-->>Client : 删除成功响应
Client->>PlayerCtrl : POST /api/player/progress
PlayerCtrl->>PlayerSvc : 保存播放进度
PlayerSvc->>DB : upsert播放记录
DB-->>PlayerSvc : 返回记录
PlayerSvc-->>PlayerCtrl : 播放记录
PlayerCtrl-->>Client : 保存成功
图表来源
播放历史记录采用PlayRecord模型,包含以下关键字段:
erDiagram
PLAYRECORD {
int id PK
int userId
int chapterId
float progress
float duration
datetime createdAt
datetime updatedAt
}
USER {
int id PK
string phone
string openid
string nickname
}
BOOKCHAPTER {
int id PK
int bookId
int number
string title
string audioUrl
}
PLAYRECORD }o--|| USER : "属于"
PLAYRECORD }o--|| BOOKCHAPTER : "对应章节"
图表来源
播放历史记录采用自动记录机制,当用户播放音频时自动保存播放进度:
flowchart TD
Start([开始播放]) --> CheckAuth[检查用户认证]
CheckAuth --> SaveProgress[保存播放进度]
SaveProgress --> UpsertRecord[upsert记录]
UpsertRecord --> UpdateProgress[更新进度]
UpsertRecord --> CreateRecord[创建新记录]
UpdateProgress --> End([结束])
CreateRecord --> End
图表来源
系统提供完整的播放进度跟踪功能,包括:
章节来源
音频生成历史记录采用AudioRecord模型,包含以下关键字段:
erDiagram
AUDIORECORD {
int id PK
int userId
string audioId
string title
string text
int wordCount
string voiceId
string voiceParams
string audioUrl
int audioDuration
int audioSize
string status
datetime createdAt
datetime updatedAt
int bookId
}
USER {
int id PK
string phone
string openid
string nickname
}
BOOK {
int id PK
int userId
string title
int totalChapters
}
AUDIORECORD }o--|| USER : "属于"
AUDIORECORD }o--|| BOOK : "关联书籍"
图表来源
音频生成历史记录支持多种查询条件和排序规则:
flowchart TD
QueryStart[开始查询] --> FilterByDate[按日期过滤]
FilterByDate --> FilterByKeyword[按关键词过滤]
FilterByKeyword --> SortByDate[按创建时间排序]
SortByDate --> Paginate[分页处理]
Paginate --> TransformData[数据转换]
TransformData --> QueryEnd[返回结果]
图表来源
系统采用UTC时间戳管理,确保全球用户的时间一致性:
章节来源
系统提供高效的批量删除功能,支持同时删除多个历史记录:
sequenceDiagram
participant Client as 客户端
participant BatchCtrl as 批量控制器
participant DB as 数据库
Client->>BatchCtrl : POST /api/history/batch-delete
BatchCtrl->>BatchCtrl : 验证参数
BatchCtrl->>DB : deleteMany(ids)
DB-->>BatchCtrl : 返回删除计数
BatchCtrl-->>Client : 删除结果
图表来源
系统采用以下策略确保批量操作的安全性和效率:
章节来源
历史页面提供完整的用户界面,支持以下功能:
编辑模式:支持进入编辑模式进行批量操作
classDiagram
class HistoryPage {
+ref isEditing
+ref selectedIds
+ref searchKeyword
+ref tabs
+fetchHistoryList()
+handleBatchDelete()
+handleBatchDownload()
+toggleSelect()
+formatDate()
}
class AudioItem {
+string _id
+string title
+string audioUrl
+number audioDuration
+number wordCount
+string voiceId
+string createdAt
}
HistoryPage --> AudioItem : "管理"
图表来源
章节来源
历史记录管理功能涉及多个数据库表之间的复杂关系:
graph LR
subgraph "用户相关"
USER[User表]
PLAYRECORD[PlayRecord表]
FAVORITE[Favorite表]
end
subgraph "内容相关"
BOOK[Book表]
BOOKCHAPTER[BookChapter表]
AUDIORECORD[AudioRecord表]
end
USER --> PLAYRECORD
USER --> AUDIORECORD
USER --> FAVORITE
BOOK --> BOOKCHAPTER
BOOKCHAPTER --> PLAYRECORD
BOOK --> AUDIORECORD
图表来源
系统依赖以下外部组件:
章节来源
系统采用多种存储优化策略:
索引优化:为常用查询字段建立索引
数据压缩:对大文本字段进行压缩存储
分页查询:默认分页大小为20,支持大数据量查询
缓存策略:对热点数据进行缓存
问题描述:播放记录无法保存到数据库 可能原因:
解决方案:
问题描述:历史记录查询响应缓慢 可能原因:
解决方案:
问题描述:批量删除操作失败 可能原因:
解决方案:
章节来源
历史记录管理功能通过合理的架构设计和实现策略,为用户提供了完整的历史记录管理体验。系统具备以下优势:
未来可以进一步优化的方向包括:
GET /api/history
查询参数:
响应数据:
POST /api/history/batch-delete
请求体:
响应数据:
POST /api/player/progress
请求体:
响应数据:保存的播放记录
章节来源
| 字段名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| id | int | 主键 | 自增 |
| userId | int | 用户ID | 必填 |
| chapterId | int | 章节ID | 必填 |
| progress | float | 播放进度 | 0 |
| duration | float | 音频时长 | 0 |
| createdAt | datetime | 创建时间 | 当前时间 |
| updatedAt | datetime | 更新时间 | 当前时间 |
| 字段名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| id | int | 主键 | 自增 |
| userId | int | 用户ID | 可选 |
| audioId | string | 音频ID | 唯一键 |
| title | string | 音频标题 | "未命名音频" |
| text | text | 文本内容 | 可选 |
| wordCount | int | 字数统计 | 0 |
| voiceId | string | 音色ID | "cherry" |
| voiceParams | string | 音色参数 | 可选 |
| audioUrl | string | 音频URL | 可选 |
| audioDuration | int | 音频时长 | 0 |
| audioSize | int | 音频大小 | 0 |
| status | string | 状态 | "processing" |
| createdAt | datetime | 创建时间 | 当前时间 |
| updatedAt | datetime | 更新时间 | 当前时间 |
| bookId | int | 关联书籍ID | 可选 |
章节来源