Files
ViGent2/Docs/BACKEND_DEV.md
Kevin Wong 945262a7fc 更新
2026-02-06 16:02:58 +08:00

142 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ViGent2 后端开发规范
本文档定义后端开发的结构规范、接口契约与实现习惯。目标是让新功能按统一范式落地,旧逻辑在修复时逐步抽离。
---
## 1. 模块化与分层原则
每个业务功能放入 `app/modules/<feature>/`,以“薄路由 + 厚服务/流程”组织代码。
- **router.py**:只做参数校验、权限校验、调用 service/workflow、返回统一响应。
- **schemas.py**Pydantic 请求/响应模型。
- **service.py**:业务逻辑与集成逻辑(非长流程)。
- **workflow.py**:长流程/重任务编排(视频生成、渲染、异步任务)。
- **__init__.py**:模块标记。
其它层级职责:
- **repositories/**数据读写Supabase不包含业务逻辑。
- **services/**外部依赖与基础能力TTS、Storage、Remotion 等)。
- **core/**:配置、安全、依赖注入、统一响应。
- **api/**:仅做 router 透传,保持 `/api/*` 路由稳定。
---
## 2. 目录结构(当前约定)
```
backend/
├── app/
│ ├── api/ # 兼容路由入口,透传到 modules
│ ├── core/ # config、deps、security、response
│ ├── modules/ # 业务模块
│ │ ├── videos/
│ │ ├── materials/
│ │ ├── publish/
│ │ ├── auth/
│ │ └── ...
│ ├── repositories/ # Supabase 数据访问
│ ├── services/ # 外部服务集成
│ └── tests/
├── assets/ # 字体 / 样式 / bgm
├── scripts/
└── requirements.txt
```
---
## 3. 接口契约规范(统一响应)
所有 JSON API 返回统一结构:
```json
{
"success": true,
"message": "ok",
"data": { },
"code": 0
}
```
- 正常响应使用 `success_response`
- 错误通过 `HTTPException` 抛出,统一由全局异常处理返回 `{success:false, message, code}`
- 不再使用 `detail` 作为前端错误文案(前端已改为读 `message`)。
---
## 4. 认证与权限
- 认证方式:**HttpOnly Cookie** (`access_token`)。
- `get_current_user` / `get_current_user_optional` 位于 `core/deps.py`
- Session 单设备校验使用 `repositories/sessions.py`
---
## 5. 任务与状态
- 视频生成任务通过 `modules/videos/workflow.py` 统一编排。
- 任务状态通过 `modules/videos/task_store.py` 读写,**不要直接维护全局 dict**。
- 默认使用 Redis`REDIS_URL`),不可用自动回退内存。
---
## 6. 文件与存储
- 所有文件上传/下载/删除/移动通过 `services/storage.py`
- 需要重命名时使用 `move_file`,避免直接读写 Storage。
---
## 7. 代码约定
- 只在 router 做校验与响应拼装。
- 业务逻辑写在 service/workflow。
- 数据库访问写在 repositories。
- 统一使用 `loguru` 打日志。
---
## 8. 开发流程建议
- **新增功能**:先建模块,再写 router/service/workflow。
- **修复 Bug**:顺手把涉及的逻辑抽到对应 service/workflow。
- **核心流程变更**:必跑冒烟(登录/生成/发布)。
---
## 9. 常用环境变量
- `SUPABASE_URL` / `SUPABASE_KEY`
- `SUPABASE_PUBLIC_URL`
- `REDIS_URL`
- `GLM_API_KEY`
- `LATENTSYNC_*`
- `WEIXIN_HEADLESS_MODE` (headful/headless-new)
- `WEIXIN_CHROME_PATH` / `WEIXIN_BROWSER_CHANNEL`
- `WEIXIN_USER_AGENT` / `WEIXIN_LOCALE` / `WEIXIN_TIMEZONE_ID`
- `WEIXIN_FORCE_SWIFTSHADER`
- `WEIXIN_TRANSCODE_MODE` (reencode/faststart/off)
---
## 10. Playwright 发布调试
- 诊断日志落盘:`backend/app/debug_screenshots/weixin_network.log` / `douyin_network.log`
- 关键失败截图:`backend/app/debug_screenshots/weixin_*.png` / `douyin_*.png`
- 视频号建议使用 headful + xvfb-run避免 headless 解码/指纹问题)
---
## 11. 最小新增模块示例
```
app/modules/foo/
├── router.py
├── schemas.py
├── service.py
└── workflow.py
```
router 仅调用 service/workflow 并返回 `success_response`