本文引用的文件
本技术文档面向“内容发布系统”,聚焦以下能力与实践:
后端采用 Koa 路由 + Prisma ORM 的模块化设计,发布模块位于 server/src/modules/publish,专辑与章节管理位于 server/src/modules/book-generator,分类管理位于 server/src/modules/categories,数据库连接入口位于 server/src/models/index.ts。
graph TB
subgraph "发布模块"
PC["publish.controller.ts<br/>路由层"]
PS["publish.service.ts<br/>业务层"]
PT["publish.types.ts<br/>类型定义"]
end
subgraph "专辑与章节"
AC["album-controller.ts<br/>专辑/章节路由"]
AMC["album-management.controller.ts<br/>专辑/章节管理路由"]
end
subgraph "分类"
CC["categories.controller.ts<br/>分类路由"]
CS["categories.service.ts<br/>分类服务"]
end
DB["models/index.ts<br/>Prisma 客户端"]
PC --> PS
PS --> DB
AC --> DB
AMC --> DB
CC --> CS
CS --> DB
图表来源
章节来源
章节来源
发布系统以“路由层-业务层-数据层”三层解耦,路由层负责鉴权与参数校验,业务层负责跨平台发布与任务编排,数据层通过 Prisma 访问数据库。
sequenceDiagram
participant C as "客户端"
participant R as "发布控制器"
participant S as "发布服务"
participant P as "平台(抖音/B站)"
participant D as "数据库(Prisma)"
C->>R : "POST /api/publish/tasks"
R->>R : "鉴权/参数校验"
R->>S : "createPublishTask(...)"
S->>D : "插入发布任务"
S-->>R : "返回任务"
R->>S : "根据平台调用发布方法"
alt 抖音
S->>P : "上传视频/封面/标签"
P-->>S : "返回作品链接"
else B站
S->>P : "OAuth2上传"
P-->>S : "返回BV号/链接"
end
S->>D : "更新任务状态/链接"
R-->>C : "返回任务ID与发布结果"
图表来源
章节来源
内容格式验证
标签与封面可选,标题必填;视频来源支持“视频项目ID”或“直传URL”。
flowchart TD
Start(["提交发布任务"]) --> CheckParams["校验平台/标题/来源参数"]
CheckParams --> ParamsOK{"参数合法?"}
ParamsOK -- 否 --> ErrParams["返回错误: 缺少必要参数"]
ParamsOK -- 是 --> ResolveVideo["解析视频/封面/描述"]
ResolveVideo --> CreateTask["创建发布任务(pending)"]
CreateTask --> ChoosePlat{"平台类型"}
ChoosePlat -- 抖音 --> Douyin["上传至抖音"]
ChoosePlat -- B站 --> Bili["上传至B站(OAuth2)"]
ChoosePlat -- 其他 --> NotSupport["返回错误: 不支持平台"]
Douyin --> UpdateTask["更新状态为成功/失败并记录链接/错误"]
Bili --> UpdateTask
UpdateTask --> Done(["返回任务ID与结果"])
ErrParams --> Done
NotSupport --> Done
图表来源
章节来源
专辑/章节重命名与移动
移动:调整章节序号,同时维护其他章节序号一致性。
sequenceDiagram
participant U as "用户"
participant AC as "专辑控制器"
participant AMC as "专辑管理控制器"
participant DB as "数据库(Prisma)"
U->>AC : "GET /api/book-generator/albums"
AC->>DB : "查询用户专辑"
DB-->>AC : "返回专辑列表"
AC-->>U : "返回专辑基础信息"
U->>AC : "POST /api/book-generator/albums"
AC->>DB : "创建专辑"
DB-->>AC : "返回专辑ID/标题"
AC-->>U : "返回创建结果"
U->>AC : "GET /api/book-generator/albums/ : id/chapters"
AC->>DB : "查询章节树形结构"
DB-->>AC : "返回章节与小节音频"
AC-->>U : "返回章节(含合并音频)"
U->>AC : "POST /api/book-generator/albums/ : id/chapters/ : chapterId/merge-audio"
AC->>DB : "查询节/小节音频URL"
AC->>AC : "合并音频并计算时长"
AC->>DB : "更新章的合并音频URL与时长"
AC-->>U : "返回合并结果"
U->>AMC : "PUT / : id/rename"
AMC->>DB : "更新专辑标题"
AMC-->>U : "返回更新结果"
U->>AMC : "PUT / : bookId/chapters/ : chapterId/move"
AMC->>DB : "调整序号并维护其他章节序号"
AMC-->>U : "返回更新结果"
图表来源
章节来源
章节来源
章节来源
前端交互:专辑与章节管理通过 Koa 路由返回统一结构,便于前端消费。
graph LR
PC["publish.controller.ts"] --> PS["publish.service.ts"]
PS --> PT["publish.types.ts"]
PS --> PRISMA["Prisma Client(models/index.ts)"]
AC["album-controller.ts"] --> PRISMA
AMC["album-management.controller.ts"] --> PRISMA
CC["categories.controller.ts"] --> CS["categories.service.ts"]
CS --> PRISMA
图表来源
章节来源
[本节为通用性能建议,不直接分析具体文件]
章节来源
本发布系统以清晰的三层架构实现了从内容生成到多平台发布的闭环:专辑与章节管理提供内容组织能力,发布模块提供跨平台自动化发布与状态跟踪,分类模块提供内容组织入口。通过严格的参数校验、凭证校验与状态机管理,系统具备良好的可运维性与扩展性。后续可在上传策略、合规检查与统计分析方面进一步增强。
[本节为总结性内容,不直接分析具体文件]
章节来源