本文档引用的文件
BookChapter 是 AI 有声书生成平台的核心数据模型,负责存储和管理书籍的章节信息。该模型采用三层级树形结构设计,支持从大纲规划到内容生成、音频合成、视频制作的完整工作流。
本模型不仅存储章节的基本信息,还包含了完整的状态管理系统,支持章节级别的生成进度跟踪、多媒体资源管理以及与书籍、评论、播放记录等相关实体的关联关系。
AI 有声书生成平台采用模块化的架构设计,BookChapter 模型位于书籍生成模块中,与其他核心模块协同工作:
graph TB
subgraph "书籍生成模块"
BC[BookChapter 模型]
BS[BookStore 存储层]
SM[状态管理器]
GS[生成服务]
LC[LangGraph 控制器]
end
subgraph "前端应用"
CD[章节详情页面]
API[API 接口]
end
subgraph "外部服务"
TTS[TTS 语音合成]
VGen[视频生成]
Player[播放器]
end
BC --> BS
BS --> SM
GS --> BC
GS --> TTS
GS --> VGen
LC --> GS
CD --> API
API --> GS
图表来源
章节来源
BookChapter 模型采用 Prisma ORM 定义,包含以下关键字段:
| 字段名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| id | Int | 自增主键 | 章节唯一标识符 |
| bookId | Int | 必填 | 关联的书籍标识符 |
| parentId | Int | 0 | 父章节标识符(0 表示章级) |
| level | Int | 1 | 层级:1=章, 2=节, 3=小节 |
| number | Int | 必填 | 同级排序序号 |
| title | String | 必填 | 章节标题 |
| summary | String? | null | 章节摘要 |
| keyPoints | String? | null | 核心知识点(JSON数组) |
| estimatedWords | Int | 1000 | 预估字数 |
| content | String? | null | 正文内容(LongText) |
| wordCount | Int | 0 | 实际字数 |
| contentError | String? | null | 内容生成错误信息 |
| generatedAt | DateTime? | null | 生成时间 |
| audioUrl | String? | null | 音频文件URL |
| audioDuration | Int | 0 | 音频时长(秒) |
| videoUrl | String? | null | 视频文件URL |
| videoDuration | Int? | null | 视频时长(秒) |
| isPublic | Boolean | false | 是否公开 |
| genStage | String | "idle" | 生成阶段状态 |
章节来源
章节采用三层级树形结构,每层承担不同的职责:
graph TD
Level1[章级 - level=1<br/>parentId=null<br/>不存储正文内容] --> Level2[节级 - level=2<br/>parentId=章ID<br/>不存储正文内容]
Level2 --> Level3[小节级 - level=3<br/>parentId=节ID<br/>存储正文内容]
Level1 --> Level1Content[目录导航]
Level2 --> Level2Content[目录导航]
Level3 --> Level3Content[实际内容存储]
style Level1 fill:#e1f5fe
style Level2 fill:#f3e5f5
style Level3 fill:#e8f5e8
图表来源
章节来源
BookChapter 采用线性阶段模型,统一管理章节的生成状态:
stateDiagram-v2
[*] --> idle : 初始化
idle --> outline_completed : 大纲完成
outline_completed --> content_generating : 开始内容生成
content_generating --> content_completed : 内容生成完成
content_completed --> audio_generating : 开始音频生成
audio_generating --> audio_completed : 音频生成完成
audio_completed --> video_generating : 开始视频生成
video_generating --> video_completed : 视频生成完成
content_generating --> failed : 生成失败
audio_generating --> failed : 生成失败
video_generating --> failed : 生成失败
failed --> content_generating : 重新生成
failed --> audio_generating : 重新生成
failed --> video_generating : 重新生成
failed --> idle : 重置状态
video_completed --> [*] : 终态
failed --> [*] : 终态
图表来源
sequenceDiagram
participant UI as 用户界面
participant API as API控制器
participant Service as 生成服务
participant Store as 存储层
participant TTS as TTS服务
participant Video as 视频生成
UI->>API : 创建书籍请求
API->>Service : 启动批量生成
Service->>Store : 创建章节记录
Service->>Service : 生成内容
Service->>TTS : 生成音频
TTS-->>Service : 返回音频URL
Service->>Store : 更新音频信息
Service->>Video : 生成视频
Video-->>Service : 返回视频URL
Service->>Store : 更新视频信息
Service-->>API : 生成完成
API-->>UI : 返回结果
图表来源
章节来源
BookStore 类提供了完整的 CRUD 操作和复杂查询功能:
flowchart TD
CreateChapter[创建章节] --> UpsertCheck{检查是否存在}
UpsertCheck --> |存在| UpdateChapter[更新现有章节]
UpsertCheck --> |不存在| InsertChapter[插入新章节]
UpdateChapter --> SetStage[设置生成阶段]
InsertChapter --> SetStage
SetStage --> Complete[创建完成]
GetChapter[获取章节] --> FindChapter[查找章节记录]
FindChapter --> ReturnChapter[返回章节信息]
UpdateChapter --> UpdateContent[更新章节内容]
UpdateContent --> UpdateMeta[更新元数据]
UpdateMeta --> Complete
图表来源
存储层实现了高效的章节树构建算法:
章节来源
状态管理器确保章节状态转换的安全性和一致性:
| 当前状态 | 允许的转移状态 | 描述 |
|---|---|---|
| idle | content_generating, failed | 初始状态,可以开始内容生成或标记失败 |
| outline_completed | content_generating, failed | 大纲完成后可以开始内容生成 |
| content_generating | content_completed, failed | 内容生成中,完成后进入完成状态 |
| content_completed | audio_generating, audio_completed, content_generating, failed | 内容完成后可以生成音频或重新生成 |
| audio_generating | audio_completed, content_completed, failed | 音频生成中,完成后进入完成状态 |
| audio_completed | video_generating, audio_generating, content_generating, failed | 音频完成后可以生成视频或重新生成 |
| video_generating | video_completed, failed | 视频生成中,完成后进入完成状态 |
| video_completed | video_generating, audio_generating, content_generating, failed | 视频完成后可以重新生成任何阶段 |
| failed | content_generating, audio_generating, video_generating, idle | 失败状态下可以重置或重新开始 |
章节来源
章节详情页面提供了完整的用户交互体验:
graph LR
Content[原始内容] --> LaTeX[LaTeX公式渲染]
LaTeX --> Markdown[Markdown渲染]
Markdown --> HTML[HTML输出]
HTML --> Display[页面显示]
subgraph "渲染流程"
A[LaTeX块级公式] --> B[LaTeX行内公式]
B --> C[Markdown语法]
C --> D[HTML元素]
end
图表来源
章节来源
erDiagram
BOOKCHAPTER {
int id PK
int bookId FK
int parentId
int level
int number
string title
string summary
string keyPoints
int estimatedWords
longtext content
int wordCount
datetime generatedAt
string audioUrl
int audioDuration
string videoUrl
int videoDuration
boolean isPublic
string genStage
}
BOOK {
int id PK
string title
string description
string status
int progress
boolean isPublished
}
COMMENT {
int id PK
int bookChapterId FK
string content
int userId
}
PLAYRECORD {
int id PK
int bookChapterId FK
int userId
int duration
datetime playedAt
}
PLAYLISTITEM {
int id PK
int bookChapterId FK
int playlistId
int sequence
}
VIDEOPROJECT {
int id PK
int bookChapterId FK
string title
string outputUrl
int duration
}
BOOKCHAPTER }o|--|| BOOK : belongs_to
BOOKCHAPTER ||--o{ COMMENT : has_many
BOOKCHAPTER ||--o{ PLAYRECORD : has_many
BOOKCHAPTER ||--o{ PLAYLISTITEM : has_many
BOOKCHAPTER ||--o{ VIDEOPROJECT : has_many
图表来源
graph TB
subgraph "服务层"
GS[生成服务]
SM[状态管理]
TS[TTS服务]
VS[视频服务]
PS[播放器服务]
end
subgraph "存储层"
BS[BookStore]
CS[评论服务]
HS[历史记录]
end
GS --> BS
GS --> SM
GS --> TS
GS --> VS
GS --> PS
BS --> CS
BS --> HS
图表来源
章节来源
当章节状态出现异常时,系统提供以下诊断方法:
flowchart TD
AudioError[音频生成失败] --> CheckContent{检查内容}
CheckContent --> |无内容| FixContent[修复内容]
CheckContent --> |有内容| CheckTTS{检查TTS服务}
CheckTTS --> |服务正常| CheckStorage{检查存储}
CheckTTS --> |服务异常| RestartTTS[重启TTS服务]
CheckStorage --> |存储异常| FixStorage[修复存储]
CheckStorage --> |存储正常| RetryAudio[重试生成]
FixContent --> RetryAudio
RestartTTS --> RetryAudio
FixStorage --> RetryAudio
RetryAudio --> Success[生成成功]
图表来源
章节来源
// POST /api/book-generator/books/:bookId/chapters
{
"number": 1,
"title": "第一章",
"summary": "章节摘要",
"keyPoints": ["要点1", "要点2"],
"estimatedWords": 5000
}
// PUT /api/book-generator/books/:bookId/chapters/:chapterNumber
{
"content": "章节正文内容",
"wordCount": 1500,
"genStage": "content_completed"
}
// POST /api/book-generator/books/:bookId/chapters/:chapterNumber/audio
{
"voiceId": "default",
"voiceParams": {
"speed": 1.0,
"pitch": 0,
"volume": 50
}
}
章节来源
BookChapter 模型通过精心设计的三层级树形结构、统一的线性状态管理和完善的多媒体资源管理,为 AI 有声书生成平台提供了强大的数据支撑。该模型不仅满足了复杂的业务需求,还具备良好的扩展性和维护性。
通过状态管理系统和生成服务的协同工作,平台能够高效地处理从内容规划到最终发布的完整流程,为用户提供了优质的有声书创作体验。
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/book-generator/books/:id/chapters | 获取书籍所有章节 |
| GET | /api/book-generator/books/:id/chapters/:chapterNumber | 获取指定章节 |
| POST | /api/book-generator/books/:id/chapters | 创建章节 |
| PUT | /api/book-generator/books/:id/chapters/:chapterNumber | 更新章节 |
| DELETE | /api/book-generator/books/:id/chapters/:chapterNumber | 删除章节 |
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/book-generator/books/:id/batch-generate | 批量生成 |
| POST | /api/book-generator/books/:id/batch-generate/cancel | 取消生成 |
| GET | /api/book-generator/books/:id/batch-generate/status | 查询状态 |
章节来源
| 旧状态 | 新 genStage | 说明 |
|---|---|---|
| draft | draft | 草稿状态 |
| planning | outline_completed | 大纲完成 |
| generating | content_generating | 内容生成中 |
| generating | audio_generating | 音频生成中 |
| generating | video_generating | 视频生成中 |
| completed | content_completed | 内容完成 |
| completed | audio_completed | 音频完成 |
| completed | video_completed | 视频完成 |
| failed/interrupted | failed | 失败状态 |
章节来源