本文引用的文件
本文件面向AI有声书生成平台的核心模块,系统性梳理并解释以下关键模块的功能职责、实现原理与使用方式:
文档同时阐述模块间的依赖关系与数据交互模式,并提供扩展与自定义的指导原则、配置要点、性能优化建议与常见问题排查方法。
后端采用模块化组织,核心模块位于 server/src/modules 下,控制器负责HTTP路由与请求参数解析,服务层封装业务逻辑与第三方集成,类型与配置位于 server/src/types 与 server/src/config。
graph TB
subgraph "认证模块"
AC["auth.controller.ts"]
AS["auth.service.ts"]
end
subgraph "TTS模块"
TC["tts.controller.ts"]
TS["tts.service.ts"]
end
subgraph "播放器模块"
PC["player.controller.ts"]
PS["player.service.ts"]
end
subgraph "会员模块"
MC["member.controller.ts"]
MS["member.service.ts"]
end
AC --> AS
TC --> TS
PC --> PS
MC --> MS
TS --> PS
PC --> TS
AC --> TC
AC --> PC
AC --> MC
图表来源
章节来源
章节来源
整体采用“控制器-服务”分层,控制器负责参数校验与响应封装,服务层负责业务流程与外部集成。TTS服务与播放器服务之间通过章节与音频记录进行数据关联;认证服务贯穿各模块用于身份校验与用户信息获取;会员服务为TTS生成提供配额与权限控制。
graph TB
Client["客户端"] --> AuthC["认证控制器<br/>auth.controller.ts"]
Client --> TTSC["TTS控制器<br/>tts.controller.ts"]
Client --> PlayerC["播放器控制器<br/>player.controller.ts"]
Client --> MemberC["会员控制器<br/>member.controller.ts"]
AuthC --> AuthService["认证服务<br/>auth.service.ts"]
TTSC --> TTSService["TTS服务<br/>tts.service.ts"]
PlayerC --> PlayerService["播放器服务<br/>player.service.ts"]
MemberC --> MemberService["会员服务<br/>member.service.ts"]
TTSService --> Storage["存储服务<br/>storage.service.ts"]
TTSService --> Merger["音频合并器<br/>audio-merger.ts"]
TTSService --> WS["WebSocket服务<br/>websocket.service.js"]
PlayerService --> Merger
PlayerService --> DB["Prisma 数据库"]
TTSService --> DB
AuthC --> DB
MemberC --> DB
MemberService --> DB
图表来源
使用方式
后续接口通过认证中间件携带用户ID
sequenceDiagram
participant C as "客户端"
participant Ctrl as "认证控制器"
participant Svc as "认证服务"
participant DB as "数据库"
C->>Ctrl : POST /auth/send-code
Ctrl->>Svc : generateSmsCode(phone)
Svc-->>Ctrl : 返回验证码
Ctrl-->>C : {code,message,data : {phone,code}}
C->>Ctrl : POST /auth/login
Ctrl->>Svc : loginWithPhone(phone, code)
Svc->>DB : 查询/创建用户
Svc-->>Ctrl : {token,user}
Ctrl-->>C : {code,message,data}
图表来源
章节来源
使用方式
完成后通过下载接口获取URL
sequenceDiagram
participant C as "客户端"
participant Ctrl as "TTS控制器"
participant Svc as "TTS服务"
participant Prov as "TTS提供商"
participant Merge as "音频合并器"
participant Store as "存储服务"
participant DB as "数据库"
C->>Ctrl : POST /tts/generate
Ctrl->>Ctrl : 参数校验/配额检查
Ctrl->>Svc : generateAudio(userId,text,voiceId,params,options)
Svc->>DB : 创建AudioRecord(processing)
Svc->>Prov : synthesize(分段)
Prov-->>Svc : 本地分段音频/云端URL
alt 云端URL
Svc->>Store : uploadAudio(临时文件)
Store-->>Svc : 返回统一URL
else 本地分段
Svc->>Merge : merge(分段->output.mp3)
Merge-->>Svc : 合并文件
Svc->>Store : uploadAudio(合并文件)
Store-->>Svc : 返回统一URL
end
Svc->>DB : 更新AudioRecord(completed,audioUrl,duration,size,title)
Svc-->>Ctrl : {audioId,audioUrl,bookId}
Ctrl-->>C : {code,message,data}
图表来源
章节来源
使用方式
播放章时自动合并小节音频,提升体验
flowchart TD
Start(["进入播放器"]) --> CheckType["判断是否为章(level=1)"]
CheckType --> |否| PlayDirect["直接播放当前音频"]
CheckType --> |是| HasMerged{"已有合并音频?"}
HasMerged --> |是| PlayMerged["播放合并音频"]
HasMerged --> |否| FetchSub["获取所有小节音频URL"]
FetchSub --> Merge["合并音频并写入数据库"]
Merge --> PlayMerged
PlayMerged --> SaveProgress["保存播放进度"]
SaveProgress --> End(["结束"])
图表来源
章节来源
使用方式
用户下单后进入支付流程,开发环境可模拟支付成功
sequenceDiagram
participant C as "客户端"
participant Ctrl as "会员控制器"
participant Svc as "会员服务"
participant DB as "数据库"
C->>Ctrl : GET /member/benefits
Ctrl-->>C : 权益与配额信息
C->>Ctrl : POST /member/order
Ctrl->>Svc : createOrder(userId, productType)
Svc->>DB : 创建订单(pending)
Svc-->>Ctrl : {orderNo,amount}
Ctrl-->>C : {code,message,data}
C->>Ctrl : POST /member/pay/mock
Ctrl->>Svc : mockPaymentSuccess(orderNo,userId)
Svc->>DB : 更新订单为paid
Svc->>DB : 更新用户会员等级与到期时间
Svc-->>Ctrl : {success,memberLevel,expireAt}
Ctrl-->>C : {code,message,data}
图表来源
章节来源
会员模块
与TTS:提供配额与优先级能力
graph LR
Auth["认证模块"] --> TTS["TTS模块"]
Auth --> Player["播放器模块"]
Auth --> Member["会员模块"]
TTS --> Player
TTS --> Storage["存储服务"]
TTS --> Merger["音频合并器"]
Player --> Merger
Member --> TTS
图表来源
章节来源
章节来源
本平台围绕“认证—TTS—播放—会员”形成闭环:认证提供身份,TTS产出内容,播放器承载体验,会员体系保障可持续使用。模块间通过清晰的控制器与服务边界协作,配合Provider工厂与存储抽象,具备良好的扩展性与可维护性。建议在生产环境中替换内存验证码为Redis、完善监控与告警,并持续评估Provider性能与成本。