# 功能定制
**本文引用的文件**
- [README.md](file://README.md)
- [app.ts](file://server/src/app.ts)
- [index.ts](file://server/src/config/index.ts)
- [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.types.ts)
- [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts)
- [tts.controller.ts](file://server/src/modules/tts/tts.controller.ts)
- [auth.controller.ts](file://server/src/modules/auth/auth.controller.ts)
- [subscription.controller.ts](file://server/src/modules/subscription/subscription.controller.ts)
- [rate-limiter.ts](file://server/src/middleware/rate-limiter.ts)
- [queue.service.ts](file://server/src/services/queue.service.ts)
- [main.ts](file://my-uniapp-vue3/src/main.ts)
- [index.ts](file://my-uniapp-vue3/src/types/index.ts)
- [user.ts](file://my-uniapp-vue3/src/store/user.ts)
- [AudioDownload.vue](file://my-uniapp-vue3/src/components/AudioDownload.vue)
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 引言
本文件面向“AI有声书生成平台”的功能定制与扩展需求,围绕业务逻辑扩展、UI组件定制、API接口扩展、类型定义与配置选项、扩展点设计原则、自定义工作流与业务规则、功能开关与A/B测试、渐进式发布策略以及向后兼容与版本管理最佳实践进行系统化说明。目标是帮助开发者在不破坏现有稳定性的前提下,安全、可控地引入新功能与变更。
## 项目结构
该平台采用前后端分离架构:
- 后端基于 Koa 2.x,模块化组织业务功能(认证、TTS、书籍生成、订阅等),通过路由集中注册。
- 前端基于 uniapp + Vue 3 + TypeScript,使用 Pinia 管理状态,页面与组件按功能划分。
- 配置集中于后端 config 模块,统一管理模型、JWT、上传、限流等参数。
- 服务层抽象了队列、存储、日志、WebSocket 等横切能力。
```mermaid
graph TB
subgraph "前端(uniapp)"
FE_Main["应用入口
main.ts"]
FE_Store["状态管理
store/user.ts"]
FE_Comps["UI组件
components/AudioDownload.vue"]
FE_Types["类型定义
types/index.ts"]
end
subgraph "后端(Koa)"
BE_App["应用入口
app.ts"]
BE_Router["路由注册
app.ts"]
BE_Modules["业务模块
modules/*"]
BE_Services["服务层
services/*"]
BE_Middleware["中间件
middleware/*"]
BE_Config["配置中心
config/index.ts"]
end
FE_Main --> FE_Store
FE_Store --> FE_Comps
FE_Main --> FE_Types
BE_App --> BE_Router
BE_Router --> BE_Modules
BE_App --> BE_Services
BE_App --> BE_Middleware
BE_App --> BE_Config
```
图表来源
- [app.ts:57-130](file://server/src/app.ts#L57-L130)
- [main.ts:10-31](file://my-uniapp-vue3/src/main.ts#L10-L31)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
章节来源
- [README.md:31-52](file://README.md#L31-L52)
- [app.ts:57-130](file://server/src/app.ts#L57-L130)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
## 核心组件
- 应用入口与路由注册:后端通过 app.ts 统一挂载中间件、静态资源、健康检查、指标接口,并注册各模块路由。
- 配置中心:集中管理端口、JWT、DashScope/TTS模型、上传大小等,支持模型自动切换与默认值。
- 业务模块控制器:如书籍生成、TTS、认证、订阅等,提供标准化的请求校验、权限控制、配额检查与错误处理。
- 服务层:队列服务、存储服务、日志与监控、WebSocket 推送等,支撑高并发与可观测性。
- 前端状态与组件:用户状态、类型定义、下载组件等,提供可复用的UI与交互能力。
章节来源
- [app.ts:57-130](file://server/src/app.ts#L57-L130)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
- [tts.controller.ts:12-127](file://server/src/modules/tts/tts.controller.ts#L12-L127)
- [auth.controller.ts:10-52](file://server/src/modules/auth/auth.controller.ts#L10-L52)
- [subscription.controller.ts:9-191](file://server/src/modules/subscription/subscription.controller.ts#L9-L191)
- [queue.service.ts:48-347](file://server/src/services/queue.service.ts#L48-L347)
- [user.ts:7-107](file://my-uniapp-vue3/src/store/user.ts#L7-L107)
- [AudioDownload.vue:34-129](file://my-uniapp-vue3/src/components/AudioDownload.vue#L34-L129)
## 架构总览
后端以模块化控制器为核心,结合中间件与服务层,形成清晰的职责边界;前端通过 Pinia 管理用户状态,组件封装常用交互。整体通过配置中心与限流策略保障稳定性与可扩展性。
```mermaid
graph TB
Client["客户端(H5/小程序)"] --> FE["前端应用"]
FE --> API["后端API"]
API --> C_Auth["认证模块"]
API --> C_TTS["TTS模块"]
API --> C_Book["书籍生成模块"]
API --> C_Sub["订阅模块"]
API --> S_Q["队列服务"]
API --> S_Rate["限流中间件"]
API --> S_Cfg["配置中心"]
API --> S_WS["WebSocket推送"]
```
图表来源
- [app.ts:99-128](file://server/src/app.ts#L99-L128)
- [rate-limiter.ts:49-120](file://server/src/middleware/rate-limiter.ts#L49-L120)
- [queue.service.ts:48-347](file://server/src/services/queue.service.ts#L48-L347)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
## 详细组件分析
### 书籍生成模块定制
- 类型与状态:通过 book-generator.types.ts 定义书籍、章节、大纲、任务、阶段与配置等强类型,便于扩展与约束。
- 控制器扩展点:book-generator.controller.ts 提供批量生成、取消、状态查询等接口,适合在此基础上增加步骤编排、条件分支与回滚策略。
- 工作流与队列:结合 queue.service.ts 的任务队列,可将复杂生成流程拆分为多个子任务,实现可观察、可重试、可暂停/恢复的工作流。
```mermaid
sequenceDiagram
participant U as "用户"
participant FE as "前端"
participant API as "书籍生成控制器"
participant SVC as "队列服务"
participant WS as "WebSocket"
U->>FE : 触发批量生成
FE->>API : POST /api/book-generator/books/ : id/batch-generate
API->>SVC : 添加生成任务
SVC-->>API : 返回任务ID
API-->>FE : 返回任务ID
loop 后台执行
SVC->>WS : 推送进度
WS-->>FE : 进度事件
end
SVC-->>API : 任务完成
API-->>FE : 完成通知
```
图表来源
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [queue.service.ts:131-190](file://server/src/services/queue.service.ts#L131-L190)
章节来源
- [book-generator.types.ts:8-232](file://server/src/modules/book-generator/book-generator.types.ts#L8-L232)
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [queue.service.ts:131-190](file://server/src/services/queue.service.ts#L131-L190)
### TTS 模块定制
- 音色与提供商:tts.controller.ts 提供音色列表、提供商列表、预览、状态查询与下载等接口,适合扩展新的TTS提供商或音色参数。
- 配额与限流:结合订阅模块与限流中间件,可在生成前进行配额检查与速率控制,避免资源滥用。
- 错误处理:通过统一的错误处理中间件与业务异常,保证对外一致的错误响应格式。
```mermaid
flowchart TD
Start(["接收生成请求"]) --> Validate["参数校验
文本/音色/书籍ID"]
Validate --> Quota["配额检查(订阅/字数)"]
Quota --> Allowed{"允许生成?"}
Allowed -- 否 --> Reject["返回配额不足错误"]
Allowed -- 是 --> Enqueue["加入队列/异步处理"]
Enqueue --> Consume["生成后消耗配额(可选)"]
Consume --> Done(["返回任务ID/状态"])
Reject --> Done
```
图表来源
- [tts.controller.ts:52-127](file://server/src/modules/tts/tts.controller.ts#L52-L127)
- [subscription.controller.ts:86-158](file://server/src/modules/subscription/subscription.controller.ts#L86-L158)
- [rate-limiter.ts:105-110](file://server/src/middleware/rate-limiter.ts#L105-L110)
章节来源
- [tts.controller.ts:12-274](file://server/src/modules/tts/tts.controller.ts#L12-L274)
- [subscription.controller.ts:86-158](file://server/src/modules/subscription/subscription.controller.ts#L86-L158)
- [rate-limiter.ts:105-110](file://server/src/middleware/rate-limiter.ts#L105-L110)
### 认证与订阅模块定制
- 认证:auth.controller.ts 提供短信验证码发送、手机号登录、用户信息读取与更新等接口,适合扩展第三方登录或二次验证。
- 订阅:subscription.controller.ts 提供套餐、余额、使用记录、配额检查等接口,适合新增计费维度或折扣策略。
章节来源
- [auth.controller.ts:10-94](file://server/src/modules/auth/auth.controller.ts#L10-L94)
- [subscription.controller.ts:9-191](file://server/src/modules/subscription/subscription.controller.ts#L9-L191)
### 前端组件与状态定制
- 用户状态:user.ts 通过 Pinia 管理 token、用户信息与会员状态,支持登录、登出、信息更新等。
- UI组件:AudioDownload.vue 封装下载与重试逻辑,支持进度展示,适合扩展批量下载、断点续传等能力。
- 类型定义:index.ts 提供用户、音频、音色、会员状态等类型,便于在组件与服务间传递数据时保持一致性。
```mermaid
classDiagram
class UserStore {
+token
+userInfo
+memberStatus
+isLoggedIn
+isMember
+initUser()
+login(phone, code)
+logout()
+fetchUserInfo()
+fetchMemberStatus()
+updateUserInfo(info)
}
class AudioDownload {
+url
+filename
+audioId
+handleDownload()
+downloadWithRetry()
+executeDownload()
}
UserStore --> AudioDownload : "触发下载/状态联动"
```
图表来源
- [user.ts:7-107](file://my-uniapp-vue3/src/store/user.ts#L7-L107)
- [AudioDownload.vue:18-129](file://my-uniapp-vue3/src/components/AudioDownload.vue#L18-L129)
章节来源
- [user.ts:7-107](file://my-uniapp-vue3/src/store/user.ts#L7-L107)
- [AudioDownload.vue:34-129](file://my-uniapp-vue3/src/components/AudioDownload.vue#L34-L129)
- [index.ts:9-89](file://my-uniapp-vue3/src/types/index.ts#L9-L89)
## 依赖关系分析
- 后端模块间解耦:app.ts 仅负责路由注册与中间件装配,具体业务由各模块控制器实现,降低耦合度。
- 服务层横切:队列、存储、日志、监控等服务通过依赖注入方式被控制器调用,便于替换与扩展。
- 前后端契约:控制器定义明确的请求/响应结构,前端组件与状态管理严格遵循类型定义,减少对接风险。
```mermaid
graph LR
App["app.ts"] --> Routers["各模块控制器"]
Routers --> Services["服务层(队列/存储/日志)"]
Routers --> Middleware["中间件(限流/安全/性能)"]
FE["前端"] --> API["后端API"]
API --> Routers
```
图表来源
- [app.ts:99-128](file://server/src/app.ts#L99-L128)
- [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
章节来源
- [app.ts:99-128](file://server/src/app.ts#L99-L128)
- [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
## 性能考量
- 限流策略:提供全局限流、登录限流、短信限流、TTS限流、上传限流等,可根据用户等级动态调整阈值。
- 队列与并发:队列服务统一处理排队与并发,失败重试与超时管理交由容错层与AI服务层处理,避免队列承担过多职责。
- 配置中心:集中管理模型、默认参数与阈值,便于灰度与A/B测试期间快速切换。
章节来源
- [rate-limiter.ts:77-120](file://server/src/middleware/rate-limiter.ts#L77-L120)
- [queue.service.ts:11-16](file://server/src/services/queue.service.ts#L11-L16)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
## 故障排查指南
- 健康检查与指标:后端提供 /health 与 /api/metrics 接口,便于快速定位服务状态与性能瓶颈。
- 错误处理:统一的错误处理中间件与业务异常,确保错误信息结构化输出,便于前端提示与日志追踪。
- 限流告警:当达到限流阈值时,返回 Retry-After 与友好提示,前端可据此进行退避重试。
- 队列可用性:若 Redis 不可用,队列会降级为内存队列,需关注任务丢失风险并及时恢复基础设施。
章节来源
- [app.ts:92-98](file://server/src/app.ts#L92-L98)
- [rate-limiter.ts:52-71](file://server/src/middleware/rate-limiter.ts#L52-L71)
- [queue.service.ts:53-75](file://server/src/services/queue.service.ts#L53-L75)
## 结论
通过模块化控制器、集中式配置、服务层抽象与严格的类型定义,平台具备良好的扩展性与可维护性。在进行功能定制时,建议遵循“职责单一、契约稳定、可观测、可回滚”的原则,配合限流与队列机制,确保变更的安全与可控。
## 附录
### 类型定义与配置选项设计原则
- 类型优先:在 TypeScript 层定义强类型,覆盖请求/响应、状态、配置与数据模型,减少运行时错误。
- 配置集中:将可变参数(端口、模型、阈值、开关)收敛至配置中心,支持热切换与灰度发布。
- 向后兼容:新增字段采用可选,避免破坏既有接口;对枚举与状态机扩展时保留历史值。
章节来源
- [book-generator.types.ts:148-232](file://server/src/modules/book-generator/book-generator.types.ts#L148-L232)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)
- [index.ts:9-89](file://my-uniapp-vue3/src/types/index.ts#L9-L89)
### API 接口扩展方法
- 新增控制器:在 modules 目录下创建控制器文件,定义路由与处理逻辑。
- 注册路由:在 app.ts 的路由注册处挂载新模块路由。
- 中间件接入:按需引入鉴权、限流、安全等中间件,确保一致性。
- 前端对接:在前端 types 与 store 中补充对应类型与状态,组件按契约消费数据。
章节来源
- [app.ts:99-128](file://server/src/app.ts#L99-L128)
- [tts.controller.ts:12-274](file://server/src/modules/tts/tts.controller.ts#L12-L274)
- [index.ts:9-89](file://my-uniapp-vue3/src/types/index.ts#L9-L89)
### 自定义工作流与业务规则
- 工作流拆分:将复杂流程拆分为多个子任务,利用队列服务实现排队与并发控制。
- 条件与回滚:在控制器中增加步骤校验与取消标志,结合 WebSocket 推送进度,支持用户中断与重试。
- 配额与限流:在生成前进行配额检查与速率限制,避免资源耗尽。
章节来源
- [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119)
- [queue.service.ts:131-190](file://server/src/services/queue.service.ts#L131-L190)
- [subscription.controller.ts:86-158](file://server/src/modules/subscription/subscription.controller.ts#L86-L158)
- [rate-limiter.ts:105-110](file://server/src/middleware/rate-limiter.ts#L105-L110)
### 功能开关、A/B测试与渐进式发布
- 功能开关:在配置中心新增布尔开关,控制器按开关分支执行不同逻辑,前端按开关渲染或隐藏入口。
- A/B测试:通过配置中心的模型切换、阈值调整与行为分流,实现灰度流量分配与效果评估。
- 渐进式发布:先开启小部分用户,观察指标与日志,再逐步扩大比例,必要时可快速回滚。
章节来源
- [index.ts:46-67](file://server/src/config/index.ts#L46-L67)
- [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
### 向后兼容性与版本管理最佳实践
- 接口版本:在路由前缀中体现版本号(如 /api/v1),保留旧版本接口一段时间。
- 字段演进:新增字段设为可选,避免破坏既有客户端;对必填字段变更时提供迁移脚本。
- 配置兼容:新增配置项提供默认值,确保未升级环境仍可正常运行。
- 文档同步:每次变更同步更新 API 文档与类型定义,保持前后端契约一致。
章节来源
- [README.md:114-135](file://README.md#L114-L135)
- [book-generator.types.ts:148-232](file://server/src/modules/book-generator/book-generator.types.ts#L148-L232)
- [index.ts:69-117](file://server/src/config/index.ts#L69-L117)