章节模型(BookChapter).md 16 KB

章节模型(BookChapter)

本文档引用的文件

  • schema.prisma
  • book-generator.store.ts
  • book-generator.types.ts
  • stage-manager.ts
  • book-generator.service.ts
  • book-generator.controller.ts
  • langgraph-controller.ts
  • chapter-detail.vue
  • API.md
  • status-system-redesign.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

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

图表来源

  • book-generator.store.ts:163-800
  • book-generator.service.ts:1-549

章节来源

  • schema.prisma:161-192
  • book-generator.types.ts:94-112

核心组件

数据模型结构

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" 生成阶段状态

章节来源

  • schema.prisma:161-192

树形结构设计

章节采用三层级树形结构,每层承担不同的职责:

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

图表来源

  • book-generator.store.ts:179-239

章节来源

  • book-generator.store.ts:179-239

架构概览

状态管理系统

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 --> [*] : 终态

图表来源

  • stage-manager.ts:39-67

生成流程架构

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 : 返回结果

图表来源

  • book-generator.service.ts:77-143
  • book-generator.store.ts:756-793

章节来源

  • book-generator.service.ts:1-549
  • stage-manager.ts:154-198

详细组件分析

数据存储层

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

图表来源

  • book-generator.store.ts:445-556

章节树构建算法

存储层实现了高效的章节树构建算法:

章节来源

  • book-generator.store.ts:179-239

状态管理器

状态管理器确保章节状态转换的安全性和一致性:

状态转移矩阵

当前状态 允许的转移状态 描述
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 失败状态下可以重置或重新开始

章节来源

  • stage-manager.ts:57-67

前端交互组件

章节详情页面提供了完整的用户交互体验:

章节内容渲染

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

图表来源

  • chapter-detail.vue:325-351

章节来源

  • chapter-detail.vue:1-800

依赖分析

数据模型依赖关系

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

图表来源

  • schema.prisma:161-192

服务层依赖

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

图表来源

  • book-generator.service.ts:1-549
  • book-generator.store.ts:1-800

章节来源

  • book-generator.types.ts:1-226

性能考虑

查询优化

  1. 索引策略:BookChapter 表建立了多个复合索引以优化查询性能
  2. 分页查询:支持大章节树的分页加载
  3. 缓存机制:前端实现智能缓存策略减少重复请求

并发控制

  1. 乐观锁:状态转换使用乐观锁防止并发冲突
  2. 事务处理:关键操作使用数据库事务保证数据一致性
  3. 队列管理:生成任务通过队列系统有序执行

故障排除指南

常见问题诊断

状态异常处理

当章节状态出现异常时,系统提供以下诊断方法:

  1. 状态冲突检测:检查当前状态与目标状态的合法性
  2. 资源清理验证:确认下游资源是否正确清理
  3. 回滚机制:支持安全的状态回退

音频生成问题

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[生成成功]

图表来源

  • book-generator.store.ts:756-793

章节来源

  • stage-manager.ts:100-147

API 使用示例

创建章节

// 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
  }
}

章节来源

  • API.md:122-156

结论

BookChapter 模型通过精心设计的三层级树形结构、统一的线性状态管理和完善的多媒体资源管理,为 AI 有声书生成平台提供了强大的数据支撑。该模型不仅满足了复杂的业务需求,还具备良好的扩展性和维护性。

通过状态管理系统和生成服务的协同工作,平台能够高效地处理从内容规划到最终发布的完整流程,为用户提供了优质的有声书创作体验。

附录

API 接口规范

章节管理接口

方法 路径 描述
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 查询状态

章节来源

  • book-generator.controller.ts:20-199

状态映射表

旧状态 新 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 失败状态

章节来源

  • status-system-redesign.md:643-670