# 功能定制

<cite>
**本文引用的文件**
- [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)
</cite>

## 目录
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["应用入口<br/>main.ts"]
FE_Store["状态管理<br/>store/user.ts"]
FE_Comps["UI组件<br/>components/AudioDownload.vue"]
FE_Types["类型定义<br/>types/index.ts"]
end
subgraph "后端(Koa)"
BE_App["应用入口<br/>app.ts"]
BE_Router["路由注册<br/>app.ts"]
BE_Modules["业务模块<br/>modules/*"]
BE_Services["服务层<br/>services/*"]
BE_Middleware["中间件<br/>middleware/*"]
BE_Config["配置中心<br/>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["参数校验<br/>文本/音色/书籍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)