# waoowaoo 技术架构说明

本文档描述仓库当前的整体技术架构、运行时拓扑与主要模块职责，便于新成员理解与运维部署对照。

---

## 1. 产品定位

**waoowaoo** 是一款面向「小说 / 剧本 → 分镜、角色、场景 → 配音 → 成片」的 **AI 影视创作 Web 应用**。用户在浏览器中管理项目与创作流程；**长耗时生成与第三方 AI 调用**主要在服务端与独立 Worker 进程中异步完成。

---

## 2. 运行时拓扑（多进程）

生产与本地开发均采用 **Next.js Web 进程 + 多个常驻 Node 进程**（见根目录 `package.json` 中 `dev` / `start` 脚本，由 `concurrently` 编排）：

| 进程 | 说明 |
|------|------|
| **Next.js** | `next dev` / `next start`：App Router 页面、`src/app/api/**` 的 HTTP API、SSR |
| **BullMQ Workers** | `src/lib/workers/index.ts`：消费 Redis 队列，处理图片 / 视频 / 语音 / 文本等任务 |
| **Watchdog** | `scripts/watchdog.ts`：队列与健康类辅助脚本 |
| **Bull Board** | `scripts/bull-board.ts`：队列可视化（Express） |

**基础设施**（`docker-compose.yml` 与典型自建环境）：

- **MySQL 8**：业务与任务相关持久化（Prisma）
- **Redis 7**：BullMQ 队列与部分运行时状态
- **对象存储**：默认 **MinIO（S3 兼容）**；亦可对接 AWS S3、腾讯云 COS 等（见依赖与 `STORAGE_TYPE`）

---

## 3. 逻辑分层示意

```mermaid
flowchart TB
  subgraph client [浏览器]
    UI[Next App Router + React]
    RQ[TanStack Query]
  end

  subgraph next [Next.js 进程]
    API[src/app/api]
    Auth[NextAuth]
    Prisma[Prisma Client]
  end

  subgraph infra [基础设施]
    MySQL[(MySQL)]
    Redis[(Redis)]
    S3[(对象存储 S3 兼容)]
  end

  subgraph workers [Worker 进程]
    W[BullMQ Workers]
    Gen[Generators / Providers]
  end

  UI --> RQ --> API
  API --> Auth
  API --> Prisma --> MySQL
  API --> Redis
  API --> S3
  W --> Redis
  W --> Gen
  W --> Prisma
  W --> S3
  Gen --> Ext[外部 AI / 媒体 API]
```

---

## 4. 前端技术栈

| 领域 | 技术 |
|------|------|
| 框架 | **Next.js 15**（App Router）、**React 19** |
| 构建 / 开发 | **Turbopack**（`next dev --turbopack`）、TypeScript |
| 国际化 | **next-intl**；`src/middleware.ts` 与 `src/i18n.ts` 配置 **`localePrefix: 'always'`**（路径如 `/zh/...`、`/en/...`） |
| 服务端状态 | **TanStack React Query**（`@tanstack/react-query`） |
| 交互 | **@dnd-kit**（拖拽排序等） |
| 视频 / 时间线 | **Remotion**（`remotion`、`@remotion/player`、`@remotion/cli`） |
| 样式 | **Tailwind CSS v4**、**Geist** 字体、**lucide-react** |

**页面与业务模块**主要位于 `src/app/[locale]/...`，其中 **novel-promotion**（小说推广 / 分镜工作流）与 **asset-hub**（资产库）等为核心业务区。

---

## 5. 后端与数据层

| 领域 | 技术 |
|------|------|
| API | **Route Handlers**：`src/app/api/**`（与前端同仓部署） |
| ORM / 数据库 | **Prisma 6** + **MySQL**（`prisma/schema.prisma`） |
| 认证 | **NextAuth v4** + **`@next-auth/prisma-adapter`** |

数据模型围绕用户、项目、分集、分镜、角色、场景、媒体对象、异步任务与计费等展开，体量较大，属于典型创作类 SaaS 模型。

---

## 6. 异步任务与媒体管线

- **队列**：**BullMQ** + **ioredis**。
- **Worker 拆分**：`src/lib/workers/` 下按领域划分（如 `image.worker`、`video.worker`、`voice.worker`、`text.worker`），具体任务逻辑在 `src/lib/workers/handlers/**`。
- **设计意图**：HTTP 请求负责校验、落库、入队；长耗时生成在 Worker 中执行，避免 Next 请求超时，并便于重试与监控。

---

## 7. AI 与多厂商集成

- **抽象方式**：`src/lib/generators/**` 以工厂（如 `factory.ts`）按 `provider` 选择图片 / 视频 / 音频生成器；与用户或系统级 **`api-config`**、模型网关等配合。
- **依赖生态（节选）**：Vercel **AI SDK**（`ai`、`@ai-sdk/*`）、**OpenAI**、**Google GenAI**、**OpenRouter**、**FAL** 等；另有 `src/lib/providers/**` 等官方或兼容网关封装。
- **治理**：`package.json` 中大量 **`scripts/guards/*`** 与 **`check:*`**，用于约束 API 层不直连 LLM、模型能力不落硬编码、路由与计费契约等，体现「配置中心 + 契约 / 静态检查」的工程策略。

---

## 8. 存储与文件

- **初始化**：`npm run storage:init` → `src/lib/storage/init.ts`。
- **后端**：`src/lib/storage` 抽象多后端；支持 MinIO / S3 / COS 等，与 Docker 环境变量（如 `STORAGE_TYPE`、`MINIO_*`）对齐。
- **媒体引用**：数据库中记录存储键或媒体对象关联，Worker 上传后回写。

---

## 9. 工程化与质量

| 类型 | 说明 |
|------|------|
| 类型检查 | `npm run typecheck`（`tsc --noEmit`） |
| Lint | ESLint（`eslint-config-next`） |
| 测试 | **Vitest**：`tests/unit`、`tests/integration`（api / provider / chain / task）、`tests/system`、`tests/regression`；计费有专项单测与并发测 |
| Git 钩子 | **Husky**（`prepare` 脚本） |
| 脚本门禁 | 大量 `check:*`、`test:guards` 聚合，与 CI / 本地校验流程配合 |

---

## 10. 目录与模块速查（开发向）

| 路径 | 职责 |
|------|------|
| `src/app/[locale]/` | 国际化下的页面与布局 |
| `src/app/api/` | HTTP API |
| `src/lib/workers/` | 队列 Worker 入口与任务处理器 |
| `src/lib/generators/` | 各厂商图片 / 视频 / 音频生成器与工厂 |
| `src/lib/prisma.ts` | Prisma 客户端单例等 |
| `src/lib/query/` | React Query 封装、mutation、keys |
| `prisma/` | Schema 与迁移 |
| `messages/` | next-intl 文案（如 `zh`、`en`） |
| `scripts/` | 运维脚本、守卫脚本、迁移脚本 |
| `tests/` | 各类自动化测试 |

---

## 11. 一句话总结

本项目采用 **「Next 全栈单体 + Prisma/MySQL + Redis/BullMQ 异步 Worker + S3 兼容对象存储 + 多厂商生成器工厂」** 架构：Web 负责交互与编排，**队列 Worker** 承载重任务与多模型调用，并通过 **守卫脚本与测试** 将模型与路由约束在可维护的配置与契约之内。

---

## 12. 文档维护

架构随版本迭代会变化；若重大变更（如队列方案、数据库、部署拓扑），请同步更新本文件并在 PR 中说明变更要点。
