# 生产部署 E2E 检查清单

> 部署完成后按顺序执行，确认全部通过再对外发布。

## 一、部署后立即检查（1分钟）

- [ ] **容器状态**：`docker ps` 确认 api / worker / web 三个容器均 Up + healthy
- [ ] **数据库迁移**：确认最新 migration 已执行（`alembic current` 或查 migration 表）
- [ ] **健康检查**：`curl https://saas-api.xiaoxiajianji.com/health` 返回 200
- [ ] **API Docs**：`https://saas-api.xiaoxiajianji.com/docs` 可访问

## 二、API 全量冒烟（5分钟）

```bash
cd tests/e2e
BASE_URL=https://saas-api.xiaoxiajianji.com \
EXISTING_TOKEN=<生产测试账号token> \
CLEANUP_ENABLED=1 \
./api_smoke_test.sh
```

预期：**全部通过，0 失败**

### 核心覆盖项

| 模块 | 关键检查点 |
|------|-----------|
| 鉴权 | 注册/登录/获取用户信息 / 未授权返回401 |
| 剪辑计划 | 列表/创建(完整+最小)/详情/更新/删除/时间线/generations |
| 剪辑模板 | 列表/分类/创建/详情/toggle-favorite/validate/删除 |
| 素材库 | 素材列表/file_url/thumbnail_url/素材库列表 |
| 诊断 | 项目级诊断/readiness_score 新格式 |
| 生成任务 | 任务列表 |
| 订阅配额 | 当前订阅/账单/仪表盘 |
| 其他 | 音色列表/AI标题生成 |

## 三、前端 SPA 路由检查（2分钟）

```bash
WEB_URL=https://saas.xiaoxiajianji.com \
BASE_URL=https://saas-api.xiaoxiajianji.com \
MODULES=nginx \
./api_smoke_test.sh
```

重点检查：

- [ ] **首页**：200 + text/html
- [ ] **/app/dashboard**：200（SPA fallback）
- [ ] **/app/editing-planner**：200
- [ ] **/app/assets**：200
- [ ] **/app/generate**：200
- [ ] **/app/templates**：200
- [ ] **/app/settings/profile**：200（深层路由刷新不丢页）
- [ ] **/assets**：不能是 403（Nginx 目录列表问题 P0）

## 四、P0 功能手测（5分钟）

> 自动化覆盖不到的交互细节，手动快速过一遍。

### 登录/注册
- [ ] 邮箱密码登录正常
- [ ] 注册流程正常
- [ ] 未登录访问 /app 重定向到登录页

### 核心工作流
- [ ] 上传一个音频/视频素材（验证 file_url 和 OSS 签名）
- [ ] 创建一个剪辑计划（验证模板→计划链路）
- [ ] 发起一次生成（验证 worker + 队列正常）
- [ ] 查看生成历史（验证 generations 链路）

### 侧边栏导航
- [ ] 所有菜单项点击后路由正确，无 404
- [ ] 刷新页面不丢失当前页（SPA fallback 生效）
- [ ] /assets 页面可正常访问（Nginx P0 修复验证）

### 新功能验证（本轮迭代特有）
根据当轮变更调整，例如：
- [ ] 诊断功能：返回 readiness_score、改进建议
- [ ] 模板收藏：toggle-favorite 切换正常
- [ ] AI 推荐 / AI 封面：功能可用（如 AI 服务已配置）

## 五、监控验证（1分钟）

- [ ] 错误率：过去5分钟 5xx < 0.1%
- [ ] 响应时间：P95 < 500ms
- [ ] 队列积压：worker 队列无持续增长
- [ ] 数据库连接：连接池正常，无泄漏

## 六、回滚预案

如果出现以下情况，立即回滚到上一版本：

1. 健康检查不通过 / 容器反复重启
2. P0 功能异常（登录、上传、生成、支付）
3. 5xx 错误率 > 1% 且持续5分钟以上
4. 数据库迁移失败 / 数据不一致

---

**全绿标准**：以上一 ~ 五项全部 ✅，无 P0/P1 遗留。
