本文引用的文件
本文件面向AI有声书生成平台的“书籍模型(Book)”,系统化阐述其核心字段设计、分类维度、状态管理机制、进度与统计指标、与用户及章节的关联关系,并提供创建、更新、查询的API使用示例与最佳实践。文档严格基于仓库现有代码与类型定义,确保技术准确性与可追溯性。
围绕Book模型的关键代码分布在以下位置:
工具与LLM:utils.ts(字数统计)、LLM服务(统一AI调用适配)
graph TB
subgraph "模型定义"
PRISMA["Prisma Schema<br/>Book/BookChapter 字段与关系"]
end
subgraph "类型与状态"
TYPES["book-generator.types.ts<br/>Book/Chapter 类型与阶段枚举"]
STAGE["stage-manager.ts<br/>章节阶段安全转移"]
end
subgraph "存储与业务"
STORE["book-generator.store.ts<br/>持久化/章节树/发布/统计"]
end
subgraph "控制器与服务"
CTRL["book-generator.controller.ts<br/>批量生成API"]
SVC["book-generator.service.ts<br/>编排器与步骤执行"]
end
subgraph "工具与AI"
UTIL["utils.ts<br/>字数统计/进度常量"]
LLM["LLM服务<br/>统一AI调用适配"]
end
PRISMA --> STORE
TYPES --> STORE
TYPES --> STAGE
STORE --> CTRL
STORE --> SVC
CTRL --> SVC
UTIL --> STORE
LLM --> STORE
图表来源
章节来源
章节来源
Book模型贯穿“类型定义—状态机—存储—控制器—服务—AI工具”的完整链路,形成从元数据到内容、音频、视频的端到端生成体系。
sequenceDiagram
participant Client as "客户端"
participant Ctrl as "控制器<br/>book-generator.controller.ts"
participant Orchestrator as "编排器<br/>book-generator.service.ts"
participant Store as "存储层<br/>book-generator.store.ts"
participant Stage as "状态机<br/>stage-manager.ts"
participant LLM as "LLM服务<br/>index.ts"
Client->>Ctrl : POST /books/ : id/batch-generate
Ctrl->>Orchestrator : 创建并启动编排任务
Orchestrator->>Store : 读取书籍与章节树
Orchestrator->>LLM : 调用AI生成内容
LLM-->>Orchestrator : 返回内容片段
Orchestrator->>Store : 更新章节内容与阶段
Orchestrator->>Stage : advanceChapter/安全转移
Stage-->>Orchestrator : 状态更新确认
Orchestrator-->>Ctrl : 推送进度/完成
Ctrl-->>Client : 返回任务状态
图表来源
章节来源
章节来源
章节来源
前进与回退
regenerateChapter:允许回退并清理下游资源
flowchart TD
Start(["进入安全转移"]) --> CheckAllowed["检查是否在允许转移矩阵内"]
CheckAllowed --> |否| Error["抛出非法转移错误"]
CheckAllowed --> |是| CalcClean["计算目标阶段所需清理的下游资源"]
CalcClean --> Optimistic["乐观锁更新:校验当前阶段并写入目标阶段"]
Optimistic --> Conflict{"更新命中数量=0?"}
Conflict --> |是| FetchActual["查询实际阶段"]
FetchActual --> SameStage{"实际阶段=目标阶段?"}
SameStage --> |是| Skip["跳过已处于目标阶段"]
SameStage --> |否| RegenCheck{"当前阶段为failed且非idle?"}
RegenCheck --> |是| Skip
RegenCheck --> |否| Warn["记录警告但不中断"]
Conflict --> |否| Done(["完成"])
图表来源
章节来源
章节来源
章节来源
进度推进
每步按比例推进,最终置100并更新书籍progress
sequenceDiagram
participant Orchestrator as "编排器"
participant Content as "内容生成"
participant Audio as "音频生成"
participant MergeA as "音频合并"
participant Video as "视频生成"
participant MergeV as "视频合并"
Orchestrator->>Content : generate_content
Content-->>Orchestrator : progress 15~95%
Orchestrator->>Audio : generate_audio
Audio-->>Orchestrator : progress 20~95%
Orchestrator->>MergeA : merge_audio
MergeA-->>Orchestrator : progress 20~95%
Orchestrator->>Video : generate_video
Video-->>Orchestrator : progress 20~95%
Orchestrator->>MergeV : merge_video
MergeV-->>Orchestrator : progress 100%
图表来源
章节来源
controller/service解耦,便于扩展与测试
erDiagram
BOOK {
int id PK
int userId
string title
string subtitle
text description
string coverUrl
string targetAudience
string style
string bookScale
int totalChapters
int estimatedWords
int progress
boolean isPublished
text outlineJson
text foreword
text afterword
text errorMsg
string failedStage
string genStage
string status
text bookAnalysis
datetime createdAt
datetime updatedAt
}
BOOKCHAPTER {
int id PK
int bookId FK
int parentId
int level
int number
string title
text summary
text keyPoints
int estimatedWords
longtext content
int wordCount
text contentError
datetime generatedAt
string audioUrl
int audioDuration
string videoUrl
int videoDuration
boolean isPublic
string genStage
text lrcLyrics
string status
datetime createdAt
datetime updatedAt
}
BOOK ||--o{ BOOKCHAPTER : "chapters"
图表来源
章节来源
章节来源
Book模型以线性阶段驱动的强一致状态机为核心,结合章节树与批量编排,实现了从大纲到内容、音频、视频的全链路自动化生成。通过Prisma模型约束、类型定义与安全转移机制,确保了数据完整性与业务正确性;配合控制器与服务层的幂等与可观测性设计,为上层UI提供了稳定可靠的API支撑。