历史记录管理.md 17 KB

历史记录管理

本文档引用的文件

  • server/src/modules/history/history.controller.ts
  • server/src/modules/history/history-batch.controller.ts
  • server/src/modules/player/player.controller.ts
  • server/src/modules/player/player.service.ts
  • server/prisma/schema.prisma
  • my-uniapp-vue3/src/pages/history/index.vue
  • docs/database-structure.md
  • docs/API.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

历史记录管理功能是本项目的重要组成部分,负责记录用户的播放历史、音频生成历史以及相关的播放进度跟踪。该功能实现了自动记录机制、历史列表查询、批量历史操作等功能,为用户提供便捷的历史记录管理和个性化体验。

本系统采用前后端分离架构,后端基于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

图表来源

  • server/src/modules/history/history.controller.ts:1-67
  • server/src/modules/history/history-batch.controller.ts:1-105
  • server/src/modules/player/player.controller.ts:1-344
  • server/src/modules/player/player.service.ts:1-280

章节来源

  • server/src/modules/history/history.controller.ts:1-67
  • server/src/modules/history/history-batch.controller.ts:1-105
  • server/src/modules/player/player.controller.ts:1-344
  • server/src/modules/player/player.service.ts:1-280

核心组件

历史记录管理功能包含以下核心组件:

数据模型设计

系统采用两种主要的历史记录模型:

  1. 播放记录模型 (PlayRecord):记录用户的播放进度和历史
  2. 音频记录模型 (AudioRecord):记录音频生成的历史记录

API接口设计

系统提供完整的RESTful API接口,支持历史记录的查询、批量操作等功能。

前端界面

提供用户友好的历史记录管理界面,支持搜索、筛选、批量操作等功能。

章节来源

  • server/prisma/schema.prisma:63-77
  • server/prisma/schema.prisma:352-373
  • docs/database-structure.md:1-402

架构概览

历史记录管理功能的整体架构如下:

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 : 保存成功

图表来源

  • server/src/modules/history/history.controller.ts:10-64
  • server/src/modules/history/history-batch.controller.ts:10-49
  • server/src/modules/player/player.controller.ts:31-53
  • server/src/modules/player/player.service.ts:39-81

详细组件分析

播放历史记录模块

数据模型设计

播放历史记录采用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 : "对应章节"

图表来源

  • server/prisma/schema.prisma:63-77

自动记录机制

播放历史记录采用自动记录机制,当用户播放音频时自动保存播放进度:

flowchart TD
Start([开始播放]) --> CheckAuth[检查用户认证]
CheckAuth --> SaveProgress[保存播放进度]
SaveProgress --> UpsertRecord[upsert记录]
UpsertRecord --> UpdateProgress[更新进度]
UpsertRecord --> CreateRecord[创建新记录]
UpdateProgress --> End([结束])
CreateRecord --> End

图表来源

  • server/src/modules/player/player.service.ts:46-81

播放进度跟踪

系统提供完整的播放进度跟踪功能,包括:

  • 进度保存:自动保存播放进度,支持断点续播
  • 进度查询:支持查询特定章节或所有播放记录
  • 进度更新:支持手动更新播放进度
  • 进度删除:支持删除特定章节的播放记录

章节来源

  • server/src/modules/player/player.controller.ts:13-88
  • server/src/modules/player/player.service.ts:10-139

音频生成历史记录模块

数据模型设计

音频生成历史记录采用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 : "关联书籍"

图表来源

  • server/prisma/schema.prisma:352-373

历史列表查询

音频生成历史记录支持多种查询条件和排序规则:

flowchart TD
QueryStart[开始查询] --> FilterByDate[按日期过滤]
FilterByDate --> FilterByKeyword[按关键词过滤]
FilterByKeyword --> SortByDate[按创建时间排序]
SortByDate --> Paginate[分页处理]
Paginate --> TransformData[数据转换]
TransformData --> QueryEnd[返回结果]

图表来源

  • server/src/modules/history/history.controller.ts:10-64

时间戳管理

系统采用UTC时间戳管理,确保全球用户的时间一致性:

  • 创建时间:记录历史记录的创建时间
  • 更新时间:记录历史记录的最后更新时间
  • 时间格式:ISO 8601标准格式

章节来源

  • server/src/modules/history/history.controller.ts:14-31
  • server/src/modules/history/history.controller.ts:49-51

批量历史操作模块

批量删除功能

系统提供高效的批量删除功能,支持同时删除多个历史记录:

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 : 删除结果

图表来源

  • server/src/modules/history/history-batch.controller.ts:10-49

批量操作策略

系统采用以下策略确保批量操作的安全性和效率:

  • 参数验证:严格验证输入参数的有效性
  • 事务处理:使用数据库事务确保操作的一致性
  • 错误处理:提供详细的错误信息和状态码
  • 性能优化:使用批量操作减少数据库往返次数

章节来源

  • server/src/modules/history/history-batch.controller.ts:10-102

前端界面组件

历史页面功能

历史页面提供完整的用户界面,支持以下功能:

  • 历史列表展示:以网格形式展示历史记录
  • 搜索功能:支持按关键词搜索历史记录
  • 时间筛选:支持按今日、本周、本月筛选
  • 批量操作:支持批量删除和批量下载
  • 编辑模式:支持进入编辑模式进行批量操作

    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 : "管理"
    

图表来源

  • my-uniapp-vue3/src/pages/history/index.vue:108-411

章节来源

  • my-uniapp-vue3/src/pages/history/index.vue:1-740

依赖分析

数据库依赖关系

历史记录管理功能涉及多个数据库表之间的复杂关系:

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

图表来源

  • server/prisma/schema.prisma:10-77
  • server/prisma/schema.prisma:130-192
  • server/prisma/schema.prisma:352-373

外部依赖

系统依赖以下外部组件:

  • Prisma ORM:数据库抽象层,提供类型安全的数据库操作
  • Koa框架:Node.js Web框架,提供HTTP服务器功能
  • UniApp框架:跨平台应用开发框架
  • MySQL数据库:持久化存储解决方案

章节来源

  • server/prisma/schema.prisma:1-8
  • docs/database-structure.md:1-402

性能考虑

存储优化策略

系统采用多种存储优化策略:

  1. 索引优化:为常用查询字段建立索引

    • 用户ID索引:加速用户相关查询
    • 创建时间索引:支持时间范围查询
    • 音频ID索引:加速音频相关查询
  2. 数据压缩:对大文本字段进行压缩存储

  3. 分页查询:默认分页大小为20,支持大数据量查询

  4. 缓存策略:对热点数据进行缓存

查询性能优化

  • 复合索引:为联合查询条件建立复合索引
  • 查询优化:使用EXPLAIN分析慢查询
  • 连接池:使用数据库连接池提高并发性能

批量操作优化

  • 批量删除:使用deleteMany减少数据库往返
  • 批量插入:使用事务批量插入数据
  • 异步处理:对耗时操作采用异步处理

故障排除指南

常见问题及解决方案

播放记录保存失败

问题描述:播放记录无法保存到数据库 可能原因

  • 用户ID类型不匹配
  • 章节ID不存在
  • 数据库连接异常

解决方案

  1. 检查用户认证状态
  2. 验证章节ID的有效性
  3. 查看数据库连接日志

历史记录查询超时

问题描述:历史记录查询响应缓慢 可能原因

  • 缺少必要的索引
  • 查询条件过于复杂
  • 数据量过大

解决方案

  1. 为查询字段添加索引
  2. 优化查询条件
  3. 考虑数据归档策略

批量删除失败

问题描述:批量删除操作失败 可能原因

  • 输入参数格式错误
  • 权限不足
  • 数据库约束冲突

解决方案

  1. 验证输入参数格式
  2. 检查用户权限
  3. 查看数据库约束错误

章节来源

  • server/src/modules/player/player.controller.ts:42-44
  • server/src/modules/history/history-batch.controller.ts:17-24

结论

历史记录管理功能通过合理的架构设计和实现策略,为用户提供了完整的历史记录管理体验。系统具备以下优势:

  1. 完整的功能覆盖:涵盖播放历史记录、音频生成历史记录、批量操作等功能
  2. 良好的用户体验:提供直观的界面和便捷的操作方式
  3. 高性能设计:采用多种优化策略确保系统的高效运行
  4. 可靠的数据管理:通过完善的错误处理和数据校验确保数据完整性

未来可以进一步优化的方向包括:

  • 增加历史记录的自动清理机制
  • 提供更丰富的数据分析功能
  • 优化移动端的交互体验
  • 增强数据备份和恢复能力

附录

API接口文档

历史记录查询接口

GET /api/history

  • 查询参数

    • page: 页码,默认1
    • pageSize: 每页数量,默认20
    • startDate: 开始日期,ISO格式
    • keyword: 搜索关键词
  • 响应数据

    • list: 历史记录列表
    • total: 总记录数
    • page: 当前页码
    • pageSize: 每页数量
    • totalPages: 总页数

批量删除接口

POST /api/history/batch-delete

  • 请求体

    • ids: 字符串数组,要删除的历史记录ID列表
  • 响应数据

    • deletedCount: 删除的记录数量

播放进度接口

POST /api/player/progress

  • 请求体

    • audioId: 音频ID
    • progress: 播放进度(0-100)
    • duration: 音频总时长
  • 响应数据:保存的播放记录

章节来源

  • server/src/modules/history/history.controller.ts:10-64
  • server/src/modules/history/history-batch.controller.ts:10-49
  • server/src/modules/player/player.controller.ts:31-53

数据模型规范

PlayRecord模型字段说明

字段名 类型 说明 默认值
id int 主键 自增
userId int 用户ID 必填
chapterId int 章节ID 必填
progress float 播放进度 0
duration float 音频时长 0
createdAt datetime 创建时间 当前时间
updatedAt datetime 更新时间 当前时间

AudioRecord模型字段说明

字段名 类型 说明 默认值
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 可选

章节来源

  • server/prisma/schema.prisma:63-77
  • server/prisma/schema.prisma:352-373