本文引用的文件
本文件面向AI有声书生成平台,系统化阐述内容关系模型,重点覆盖:
围绕内容关系模型的核心文件分布如下:
关联模块:历史、评论、收藏、播放列表等
graph TB
subgraph "数据层"
SCHEMA["schema.prisma<br/>模型与关系定义"]
MIG["migration.sql<br/>外键与索引"]
end
subgraph "业务层"
TYPES["book-generator.types.ts<br/>类型定义"]
STORE["book-generator.store.ts<br/>存储与查询"]
SERVICE["book-generator.service.ts<br/>编排与流程控制"]
CTRL["album-controller.ts<br/>专辑/章节API"]
end
subgraph "关联模块"
HIS["history.controller.ts<br/>历史记录"]
COM["comments.controller.ts<br/>评论"]
FAV["favorites.controller.ts<br/>收藏"]
end
SCHEMA --> MIG
TYPES --> STORE
STORE --> SERVICE
SERVICE --> CTRL
SCHEMA -. 关联 .-> HIS
SCHEMA -. 关联 .-> COM
SCHEMA -. 关联 .-> FAV
图表来源
章节来源
关键点:
章节来源
内容关系模型在AI生成流程中的作用:
导航与播放:树形结构驱动章节导航;播放列表基于章节或音频项
sequenceDiagram
participant U as "用户"
participant C as "专辑控制器(album-controller)"
participant S as "编排服务(book-generator.service)"
participant ST as "存储(book-generator.store)"
participant DB as "数据库(schema.prisma)"
U->>C : 请求生成书籍内容
C->>S : 触发批量生成编排
S->>ST : 获取章节树(getChapterTree)
ST->>DB : 查询章节(level, number排序)
DB-->>ST : 返回章节树
S->>ST : 生成叶节点内容(generate_content)
ST->>DB : 更新章节(genStage/content)
S->>ST : 生成叶节点音频(generate_audio)
ST->>DB : 更新章节(audioUrl/duration)
S->>ST : 合并父节点音频(merge_audio)
ST->>DB : 更新父章节(audioUrl/duration)
S-->>U : 推送进度/完成
图表来源
数据一致性
通过事务操作(如发布/取消发布)保证状态变更原子性
erDiagram
BOOK {
int id PK
int userId
string title
boolean isPublished
string genStage
}
BOOKCHAPTER {
int id PK
int bookId FK
int parentId
int level
int number
string title
string audioUrl
int audioDuration
string genStage
}
PLAYRECORD {
int id PK
int userId FK
int chapterId FK
float progress
}
COMMENT {
int id PK
int userId FK
int chapterId FK
string content
}
FAVORITE {
int id PK
int userId FK
int bookId FK
}
PLAYLIST {
int id PK
int userId FK
string name
}
PLAYLISTITEM {
int id PK
int playlistId FK
int chapterId FK
int order
}
BOOK ||--o{ BOOKCHAPTER : "包含"
BOOKCHAPTER ||--o{ PLAYRECORD : "被播放"
BOOKCHAPTER ||--o{ COMMENT : "被评论"
BOOKCHAPTER ||--o{ PLAYLISTITEM : "作为项"
PLAYLIST ||--o{ PLAYLISTITEM : "包含"
USER ||--o{ PLAYRECORD : "产生记录"
USER ||--o{ COMMENT : "发表"
USER ||--o{ FAVORITE : "收藏"
BOOK ||--o{ FAVORITE : "被收藏"
图表来源
章节来源
数据修复与校验
统一parentId为0(章级)或具体父节点ID
flowchart TD
Start(["开始"]) --> LoadChapters["加载书籍章节<br/>按 level+number 排序"]
LoadChapters --> BuildMap["构建映射:level=1/2 映射表"]
BuildMap --> LinkSections["连接节到章<br/>parentId=章ID"]
LinkSections --> LinkSubsections["连接小节到节<br/>parentId=节ID"]
LinkSubsections --> MergeAudio["按章聚合小节音频"]
MergeAudio --> UpdateChapter["更新章音频URL与时长"]
UpdateChapter --> End(["结束"])
图表来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
循环依赖
无明显循环依赖,模块职责清晰
graph LR
CTRL["album-controller.ts"] --> STORE["book-generator.store.ts"]
STORE --> PRISMA["@prisma/client"]
SERVICE["book-generator.service.ts"] --> STORE
SERVICE --> PRISMA
TYPES["book-generator.types.ts"] --> STORE
TYPES --> SERVICE
图表来源
章节来源
本内容关系模型以“bookId + parentId + level + number”的唯一约束为核心,构建稳定可靠的树形结构,配合级联删除与外键约束,确保书籍与章节数据的一致性。通过合理的索引策略与查询优化,支撑复杂的导航与播放列表需求。在AI生成流程中,该模型为大纲生成、内容创作与媒体合成提供了坚实的数据基础。
章节来源