音频管理API.md 12 KB

音频管理API

本文档引用的文件

  • audio.controller.js
  • audio.service.js
  • app.ts
  • auth.ts
  • errorHandler.ts
  • schema.prisma
  • player.controller.ts
  • player.service.ts
  • audioedit.controller.ts
  • audioedit.service.ts

目录

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

简介

音频管理API模块提供了完整的音频内容管理功能,包括音频列表获取、详情查询、删除操作、收藏状态切换等核心功能。该模块基于Koa框架构建,采用JWT认证机制,支持分页查询、关键字搜索和分类过滤。

项目结构

音频管理API位于以下关键位置:

graph TB
subgraph "服务器架构"
A[应用入口 app.ts] --> B[路由注册]
B --> C[音频控制器 audio.controller.js]
B --> D[播放器控制器 player.controller.ts]
B --> E[音频编辑控制器 audioedit.controller.ts]
C --> F[音频服务 audio.service.js]
D --> G[播放器服务 player.service.ts]
E --> H[音频编辑服务 audioedit.service.ts]
F --> I[Prisma ORM]
G --> I
H --> J[FFmpeg处理]
I --> K[MySQL数据库]
end

图表来源

  • app.ts:100-128
  • audio.controller.js:43-143

章节来源

  • app.ts:100-128
  • audio.controller.js:43-143

核心组件

音频控制器 (Audio Controller)

音频控制器负责处理HTTP请求和响应,提供以下主要接口:

  • GET /api/audio/list - 获取音频列表
  • GET /api/audio/:id - 获取音频详情
  • DELETE /api/audio/:id - 删除音频
  • PUT /api/audio/:id/favorite - 切换收藏状态
  • PUT /api/audio/:id - 更新音频信息
  • GET /api/audio/favorites - 获取收藏列表
  • GET /api/audio/stats/overview - 获取用户统计

音频服务 (Audio Service)

音频服务层提供业务逻辑实现,包括数据查询、过滤和验证功能。

认证中间件

系统采用JWT认证机制,支持可选认证模式,允许未登录用户访问部分功能。

章节来源

  • audio.controller.js:44-142
  • audio.service.js:11-155
  • auth.ts:52-80

架构概览

sequenceDiagram
participant Client as 客户端
participant Router as 路由器
participant Controller as 音频控制器
participant Service as 音频服务
participant DB as 数据库
Client->>Router : 发送HTTP请求
Router->>Controller : 调用相应控制器方法
Controller->>Controller : 参数验证和转换
Controller->>Service : 调用业务逻辑
Service->>DB : 执行数据库查询
DB-->>Service : 返回查询结果
Service-->>Controller : 返回处理结果
Controller-->>Client : 返回JSON响应
Note over Controller,DB : 支持JWT认证和错误处理

图表来源

  • audio.controller.js:45-117
  • audio.service.js:11-46

详细组件分析

分页参数和查询选项

音频列表接口支持以下分页和过滤参数:

参数名 类型 默认值 描述 示例
page number 1 页码 ?page=1
pageSize number 10 每页数量 ?pageSize=20
isFavorite boolean undefined 收藏状态过滤 ?isFavorite=true
keyword string undefined 关键字搜索 ?keyword=主题
category string undefined 分类过滤 ?category=技术

章节来源

  • audio.controller.js:47-54
  • audio.service.js:12-30

排序选项

系统默认按创建时间降序排列音频列表,确保最新的音频优先显示。

章节来源

  • audio.service.js:35

权限控制机制

系统采用多层权限控制:

flowchart TD
A[请求到达] --> B{是否需要认证?}
B --> |是| C[JWT认证]
B --> |否| D[可选认证]
C --> E{认证是否通过?}
E --> |通过| F[执行业务逻辑]
E --> |失败| G[返回401错误]
D --> H[设置测试用户]
H --> F
F --> I[返回成功响应]
G --> J[返回错误信息]

图表来源

  • auth.ts:52-80
  • errorHandler.ts:3-24

章节来源

  • auth.ts:7-49
  • errorHandler.ts:27-67

音频元数据字段

基于Prisma Schema定义的音频相关字段:

字段名 类型 描述 约束
id Int 主键ID 自增, 唯一
userId Int? 用户ID 外键关联用户表
audioId String 音频标识符 唯一约束
title String 音频标题 默认"未命名音频"
text String? 文本内容 长文本类型
wordCount Int 字数统计 默认0
voiceId String 语音ID 默认"cherry"
voiceParams String? 语音参数 JSON字符串
audioUrl String? 音频URL 长文本类型
audioDuration Int 音频时长(秒) 默认0
audioSize Int 音频大小(bytes) 默认0
status String 状态 默认"processing"
errorMsg String? 错误信息 长文本类型
createdAt DateTime 创建时间 默认当前时间
updatedAt DateTime 更新时间 默认当前时间
bookId Int? 所属书籍ID 外键关联书籍表

章节来源

  • schema.prisma:354-375

文件格式支持和存储策略

系统支持多种音频格式处理:

graph LR
A[音频输入] --> B[格式检测]
B --> C{格式类型}
C --> |MP3/WAV/FLAC| D[直接处理]
C --> |其他格式| E[格式转换]
E --> F[统一输出MP3]
D --> G[存储到OSS/本地]
F --> G
G --> H[静态文件服务]
H --> I[CDN加速]

图表来源

  • app.ts:85-89

章节来源

  • app.ts:76-83
  • audioedit.service.ts:4-48

批量操作接口

系统提供以下批量操作能力:

  • 批量删除播放记录 - 支持删除多个音频的播放记录
  • 批量合并音频 - 支持将多个音频文件按指定顺序合并
  • 批量裁剪音频 - 支持对多个音频进行同时裁剪处理

章节来源

  • player.controller.ts:91-107
  • audioedit.controller.ts:52-80

音频播放状态同步

系统通过播放记录表实现播放状态的持久化存储:

stateDiagram-v2
[*] --> 未播放
未播放 --> 播放中 : 开始播放
播放中 --> 播放中 : 更新进度
播放中 --> 已完成 : 播放结束
播放中 --> 暂停 : 暂停播放
暂停 --> 播放中 : 继续播放
已完成 --> [*]
暂停 --> [*]

图表来源

  • player.service.ts:39-81

章节来源

  • player.controller.ts:14-88
  • player.service.ts:10-122

缓存策略

系统采用多层缓存机制:

  • Redis缓存 - 用户会话和热点数据缓存
  • 浏览器缓存 - 音频文件的HTTP缓存头设置
  • CDN缓存 - 静态资源的全球分发缓存

章节来源

  • app.ts:142-144

依赖关系分析

graph TB
subgraph "外部依赖"
A[JWT] --> B[认证]
C[Koa Router] --> D[路由处理]
E[Prisma] --> F[数据库ORM]
G[MySQL] --> H[数据存储]
I[Redis] --> J[缓存存储]
end
subgraph "内部模块"
K[音频控制器] --> L[音频服务]
L --> F
M[播放器控制器] --> N[播放器服务]
N --> F
O[音频编辑控制器] --> P[音频编辑服务]
P --> Q[FFmpeg]
end
F --> H
I --> R[缓存服务]

图表来源

  • auth.ts:2-5
  • audio.service.js:9
  • player.service.ts:1-5

章节来源

  • app.ts:16-25
  • audio.controller.js:39-42

性能考虑

查询优化

  • 索引策略 - 在用户ID、创建时间、音频ID等字段上建立适当索引
  • 分页查询 - 使用skip/take模式实现高效分页
  • 条件过滤 - 支持多条件组合查询,减少不必要的数据传输

缓存优化

  • 热点数据缓存 - 将常用音频列表和用户统计数据缓存到Redis
  • 静态资源优化 - 音频文件通过CDN分发,减少服务器负载
  • 数据库连接池 - 使用连接池管理数据库连接,提高并发性能

存储优化

  • 压缩算法 - 使用高效的音频压缩算法减少存储空间
  • 分片存储 - 大文件采用分片存储策略,支持断点续传
  • 生命周期管理 - 实现自动清理过期音频文件的机制

故障排除指南

常见错误类型

错误代码 错误类型 描述 解决方案
400 BadRequestError 请求参数错误 检查必填参数和数据格式
401 UnauthorizedError 未授权访问 验证JWT Token有效性
403 ForbiddenError 禁止访问 检查用户权限和资源所有权
404 NotFoundError 资源不存在 确认音频ID和用户ID的有效性
429 QuotaExceededError 使用次数已达上限 检查用户套餐限制

调试建议

  1. 启用详细日志 - 在开发环境中查看完整的错误堆栈信息
  2. 参数验证 - 确保所有请求参数都经过适当的类型检查
  3. 数据库连接 - 检查Prisma连接配置和数据库可用性
  4. 认证测试 - 使用JWT调试工具验证Token生成和验证流程

章节来源

  • errorHandler.ts:27-67
  • auth.ts:33-48

结论

音频管理API模块提供了完整的音频内容管理解决方案,具有以下特点:

  • 完整的功能覆盖 - 支持音频的增删改查和收藏管理
  • 灵活的查询选项 - 提供分页、搜索和过滤功能
  • 安全的权限控制 - 基于JWT的认证机制和细粒度权限管理
  • 高性能的架构设计 - 多层缓存和优化的数据库查询
  • 可扩展的存储策略 - 支持多种音频格式和存储后端

该模块为音频应用提供了坚实的技术基础,支持从个人音频管理到大规模音频内容平台的各种需求。