# 功能定制 **本文引用的文件** - [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)