本文档引用的文件
音频管理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
图表来源
章节来源
音频控制器负责处理HTTP请求和响应,提供以下主要接口:
音频服务层提供业务逻辑实现,包括数据查询、过滤和验证功能。
系统采用JWT认证机制,支持可选认证模式,允许未登录用户访问部分功能。
章节来源
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认证和错误处理
图表来源
音频列表接口支持以下分页和过滤参数:
| 参数名 | 类型 | 默认值 | 描述 | 示例 |
|---|---|---|---|---|
| page | number | 1 | 页码 | ?page=1 |
| pageSize | number | 10 | 每页数量 | ?pageSize=20 |
| isFavorite | boolean | undefined | 收藏状态过滤 | ?isFavorite=true |
| keyword | string | undefined | 关键字搜索 | ?keyword=主题 |
| category | string | undefined | 分类过滤 | ?category=技术 |
章节来源
系统默认按创建时间降序排列音频列表,确保最新的音频优先显示。
章节来源
系统采用多层权限控制:
flowchart TD
A[请求到达] --> B{是否需要认证?}
B --> |是| C[JWT认证]
B --> |否| D[可选认证]
C --> E{认证是否通过?}
E --> |通过| F[执行业务逻辑]
E --> |失败| G[返回401错误]
D --> H[设置测试用户]
H --> F
F --> I[返回成功响应]
G --> J[返回错误信息]
图表来源
章节来源
基于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 | 外键关联书籍表 |
章节来源
系统支持多种音频格式处理:
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加速]
图表来源
章节来源
系统提供以下批量操作能力:
章节来源
系统通过播放记录表实现播放状态的持久化存储:
stateDiagram-v2
[*] --> 未播放
未播放 --> 播放中 : 开始播放
播放中 --> 播放中 : 更新进度
播放中 --> 已完成 : 播放结束
播放中 --> 暂停 : 暂停播放
暂停 --> 播放中 : 继续播放
已完成 --> [*]
暂停 --> [*]
图表来源
章节来源
系统采用多层缓存机制:
章节来源
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[缓存服务]
图表来源
章节来源
| 错误代码 | 错误类型 | 描述 | 解决方案 |
|---|---|---|---|
| 400 | BadRequestError | 请求参数错误 | 检查必填参数和数据格式 |
| 401 | UnauthorizedError | 未授权访问 | 验证JWT Token有效性 |
| 403 | ForbiddenError | 禁止访问 | 检查用户权限和资源所有权 |
| 404 | NotFoundError | 资源不存在 | 确认音频ID和用户ID的有效性 |
| 429 | QuotaExceededError | 使用次数已达上限 | 检查用户套餐限制 |
章节来源
音频管理API模块提供了完整的音频内容管理解决方案,具有以下特点:
该模块为音频应用提供了坚实的技术基础,支持从个人音频管理到大规模音频内容平台的各种需求。