feat: integrate Seedance API key via K8s Secret and auto-create admin user
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m46s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m46s
- CI/CD creates K8s Secret from Gitea Secrets (ARK_API_KEY not in code) - Backend deployment reads ARK_API_KEY from secretKeyRef - Enable SEEDANCE_ENABLED=true in production - Auto-create admin superuser on container startup if not exists - Update CLAUDE.md and agent-auto memory docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1f3a955bfb
commit
c1f29cbf85
@ -308,3 +308,38 @@ Implemented Phase 3 features as defined in PRD v3.0: **Quota System Refactor + A
|
|||||||
- TypeScript: `tsc --noEmit` 0 errors
|
- TypeScript: `tsc --noEmit` 0 errors
|
||||||
- Backend: `python -c "import django; ..."` 全部导入成功
|
- Backend: `python -c "import django; ..."` 全部导入成功
|
||||||
- Migration: 已创建并应用 (0003)
|
- Migration: 已创建并应用 (0003)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-13 手动开发:异常上报 + 轮询优化
|
||||||
|
|
||||||
|
### What was done
|
||||||
|
|
||||||
|
**1. LogCenterMiddleware — 新增 Django 中间件(`backend/utils/log_center.py`)**
|
||||||
|
- 问题:线上 `/api/v1/video/tasks` 返回 500,但日志中台未收到任何错误上报
|
||||||
|
- 原因:DRF 的 `custom_exception_handler` 只能捕获视图内的异常。模块导入失败、中间件报错、URL 解析错误等发生在 DRF 之前,完全绕过 DRF 异常处理
|
||||||
|
- 解决:新增 `LogCenterMiddleware`,放在 `settings.py` MIDDLEWARE 列表第一位(最外层)
|
||||||
|
- 异常捕获三层分工(互不重复):
|
||||||
|
- DRF 视图异常 → `custom_exception_handler` 上报(DRF 内部 try/except 拦截,不传播到中间件)
|
||||||
|
- 非 DRF 视图异常 → `LogCenterMiddleware.process_exception` 上报
|
||||||
|
- 中间件/导入异常 → `LogCenterMiddleware.__call__` try/except 上报
|
||||||
|
|
||||||
|
**2. custom_exception_handler 优化(`backend/utils/log_center.py`)**
|
||||||
|
- 问题:DRF 默认 `exception_handler` 对非 APIException(如数据库错误)返回 `None`,Django 接管后返回 HTML 500 页面,API 客户端无法解析
|
||||||
|
- 解决:当 `exception_handler` 返回 `None` 时,返回 JSON 格式 `{'error': 'ExceptionType: message'}`,HTTP 500
|
||||||
|
|
||||||
|
**3. 前端轮询间隔调整(`web/src/store/generation.ts`)**
|
||||||
|
- 从 5 秒(`5000`ms)改为 3 分钟(`3 * 60 * 1000`ms)
|
||||||
|
- 原因:Seedance 视频生成耗时较长(通常 2-5 分钟),5 秒轮询造成大量无效请求
|
||||||
|
|
||||||
|
### 文件变更清单
|
||||||
|
| 文件 | 变更 |
|
||||||
|
|------|------|
|
||||||
|
| `backend/utils/log_center.py` | 新增 `LogCenterMiddleware` 类;`custom_exception_handler` 增加 JSON 500 兜底 |
|
||||||
|
| `backend/config/settings.py` | MIDDLEWARE 列表首位加 `utils.log_center.LogCenterMiddleware` |
|
||||||
|
| `web/src/store/generation.ts:84` | `setInterval` 从 `5000` 改为 `3 * 60 * 1000` |
|
||||||
|
|
||||||
|
### 关键技术决策
|
||||||
|
- 中间件放在 MIDDLEWARE 第一位:确保能捕获所有内层中间件的异常
|
||||||
|
- 三层异常捕获无重复上报:DRF 视图异常由 DRF 的 dispatch() 内部 try/except 拦截,不会传播到中间件层
|
||||||
|
- JSON 500 响应包含具体错误类型和消息:便于前端/运维定位问题
|
||||||
|
|||||||
@ -373,3 +373,21 @@ PRD v2.1 将 Phase 2 标记为"🔲 待开发"且验收标准注明"当前不验
|
|||||||
- Seedance 结果视频 URL 24 小时有效,暂未实现下载到 TOS 持久化
|
- Seedance 结果视频 URL 24 小时有效,暂未实现下载到 TOS 持久化
|
||||||
- 前端 generation store 完全重写:删除 mock 进度,改为真实 API 调用 + 轮询
|
- 前端 generation store 完全重写:删除 mock 进度,改为真实 API 调用 + 轮询
|
||||||
- video/generate 接口从 FormData 改为 JSON 请求格式
|
- video/generate 接口从 FormData 改为 JSON 请求格式
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-13 手动优化:异常上报体系 + 轮询策略
|
||||||
|
|
||||||
|
### 架构决策
|
||||||
|
- **异常上报三层体系**:LogCenterMiddleware(Django 中间件兜底) + custom_exception_handler(DRF 视图层) + Log Center 远程上报,三层互不重复
|
||||||
|
- **中间件优先级**:LogCenterMiddleware 放在 MIDDLEWARE 列表第一位,确保能捕获所有内层异常
|
||||||
|
- **API 500 响应 JSON 化**:所有未处理异常返回 `{'error': 'ExceptionType: message'}` 而非 HTML,便于前端解析和运维排查
|
||||||
|
- **轮询间隔从 5 秒改为 3 分钟**:Seedance 视频生成耗时 2-5 分钟,高频轮询无意义且增加后端负载
|
||||||
|
|
||||||
|
### 变更文件
|
||||||
|
- `backend/utils/log_center.py` — 新增 LogCenterMiddleware + 优化 custom_exception_handler
|
||||||
|
- `backend/config/settings.py` — MIDDLEWARE 加入中间件
|
||||||
|
- `web/src/store/generation.ts` — 轮询间隔调整
|
||||||
|
|
||||||
|
### CLAUDE.md 更新
|
||||||
|
- 增量开发指南从 "Autonomous Skill" 改为 "agent-auto",包含正确的 --resume 命令和完整流程说明
|
||||||
|
|||||||
@ -280,6 +280,23 @@ Phase 4 实现了 TOS 对象存储 + Seedance 视频生成 API 集成,替换
|
|||||||
- `test/unit/phase3Features.test.ts` — 可能受 types 变更影响 (GenerationTask 新增 taskId 字段)
|
- `test/unit/phase3Features.test.ts` — 可能受 types 变更影响 (GenerationTask 新增 taskId 字段)
|
||||||
- `test/e2e/video-generation.spec.ts` — E2E 测试可能受影响 (生成流程改为真实 API 调用)
|
- `test/e2e/video-generation.spec.ts` — E2E 测试可能受影响 (生成流程改为真实 API 调用)
|
||||||
|
|
||||||
|
### 2026-03-13 手动变更待测
|
||||||
|
|
||||||
|
**后端变更**
|
||||||
|
- `backend/utils/log_center.py` — 新增 `LogCenterMiddleware`(Django 中间件,捕获 DRF 之外的异常并上报 Log Center)
|
||||||
|
- `backend/utils/log_center.py` — `custom_exception_handler` 优化:非 APIException 返回 JSON 500 而非 HTML
|
||||||
|
- `backend/config/settings.py` — MIDDLEWARE 首位新增 `utils.log_center.LogCenterMiddleware`
|
||||||
|
|
||||||
|
**前端变更**
|
||||||
|
- `web/src/store/generation.ts:84` — 轮询间隔从 5 秒改为 3 分钟
|
||||||
|
|
||||||
|
**需要验证**
|
||||||
|
1. LogCenterMiddleware 不影响正常请求处理(200/201/401/404 响应不受影响)
|
||||||
|
2. 视图异常返回 JSON 格式 500(`{'error': 'ExceptionType: message'}`)而非 HTML
|
||||||
|
3. 中间件异常(如模块导入失败)能被 LogCenterMiddleware 捕获
|
||||||
|
4. 前端轮询间隔确认为 3 分钟
|
||||||
|
5. 现有单元测试和 E2E 测试不受影响
|
||||||
|
|
||||||
### 需要新增的测试
|
### 需要新增的测试
|
||||||
1. TOS 上传测试 (mock boto3 client)
|
1. TOS 上传测试 (mock boto3 client)
|
||||||
2. Seedance API 客户端测试 (mock requests)
|
2. Seedance API 客户端测试 (mock requests)
|
||||||
|
|||||||
@ -60,6 +60,12 @@ jobs:
|
|||||||
method: kubeconfig
|
method: kubeconfig
|
||||||
kubeconfig: ${{ secrets.KUBE_CONFIG }}
|
kubeconfig: ${{ secrets.KUBE_CONFIG }}
|
||||||
|
|
||||||
|
- name: Create or Update Secrets
|
||||||
|
run: |
|
||||||
|
kubectl create secret generic video-backend-secrets \
|
||||||
|
--from-literal=ARK_API_KEY=${{ secrets.ARK_API_KEY }} \
|
||||||
|
--dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
|
||||||
- name: Apply K8s Manifests
|
- name: Apply K8s Manifests
|
||||||
id: deploy
|
id: deploy
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
117
CLAUDE.md
117
CLAUDE.md
@ -184,72 +184,89 @@ jimeng-clone/
|
|||||||
|
|
||||||
### How to Add Features to This Project
|
### How to Add Features to This Project
|
||||||
|
|
||||||
This project was generated and maintained using the **Autonomous Skill** for Claude Code.
|
This project was generated and maintained using **agent-auto**(多 Agent 协作自动开发系统)。
|
||||||
For incremental development, you have two approaches:
|
项目路径:`/Users/maidong/Desktop/zyc/研究openclaw/agent-auto/`
|
||||||
|
|
||||||
#### Approach 1: Direct AI Development (Small Changes)
|
增量开发有两种方式:
|
||||||
For small features, bug fixes, or UI tweaks — just describe what you want directly to Claude Code.
|
|
||||||
Claude Code will read this CLAUDE.md to understand the project context.
|
|
||||||
|
|
||||||
Example prompts:
|
#### 方式 1:Direct AI Development(小改动)
|
||||||
|
Bug 修复、UI 微调、单个接口等小改动,直接在 Claude Code 中描述需求即可。
|
||||||
|
Claude Code 会读取本文件(CLAUDE.md)理解项目上下文。
|
||||||
|
|
||||||
|
示例:
|
||||||
- "Add a logout button to the navbar"
|
- "Add a logout button to the navbar"
|
||||||
- "Fix the date format in the records table"
|
- "Fix the date format in the records table"
|
||||||
- "Add input validation to the login form"
|
- "修改轮询间隔为 3 分钟"
|
||||||
- "Change the default daily quota from 600 to 1200 seconds"
|
- "Change the default daily quota from 600 to 1200 seconds"
|
||||||
|
|
||||||
**IMPORTANT — Update Documentation After Every Change:**
|
**IMPORTANT — 每次改动后必须更新文档:**
|
||||||
Even for the smallest change, you MUST update documentation to keep it in sync:
|
|
||||||
|
|
||||||
1. **Update `CLAUDE.md`** (this file):
|
1. **更新 `CLAUDE.md`**(本文件):
|
||||||
- New API endpoint → add to API Endpoints table
|
- 新 API 端点 → 加到 API Endpoints 表
|
||||||
- New page/route → add to Frontend Routes table
|
- 新页面/路由 → 加到 Frontend Routes 表
|
||||||
- New model/field → add to Database Models section
|
- 新 model/字段 → 加到 Database Models 区
|
||||||
- New component → add to Directory Structure or Key Files
|
- 配置变更 → 更新对应区
|
||||||
- Any config change → update relevant section
|
- 始终在底部 **Change History** 表加一行
|
||||||
- Always add a row to the **Change History** table at the bottom
|
|
||||||
|
|
||||||
2. **Update Claude Code memory** (if auto-memory is available):
|
2. **更新 Claude Code memory**(如有):
|
||||||
- Update the project's memory files under `~/.claude/projects/` to reflect the change
|
- 更新 `~/.claude/projects/` 下的 memory 文件
|
||||||
- This ensures future AI sessions across different conversations also know about the change
|
- 确保跨会话的 AI 也能了解变更
|
||||||
|
|
||||||
3. **Even non-architectural changes must be tracked**:
|
3. **非架构性改动也要记录**:
|
||||||
- Bug fix → add to Change History
|
- Bug fix / UI 微调 / 依赖更新 / 配置值变更 → 都加到 Change History
|
||||||
- UI tweak → add to Change History
|
|
||||||
- Dependency update → update Quick Start / Tech Stack section
|
|
||||||
- Config value change → update relevant section
|
|
||||||
|
|
||||||
Failing to update documentation means future AI sessions will work with stale context and may introduce conflicts or duplicate work.
|
未更新文档会导致后续 AI 会话使用过期上下文,引发冲突或重复工作。
|
||||||
|
|
||||||
#### Approach 2: Autonomous Skill (Large Features)
|
#### 方式 2:agent-auto(大功能 / 全栈新模块)
|
||||||
For complex, multi-step features, use the Autonomous Skill:
|
涉及 3+ 文件、新模块、跨模块重构等复杂需求,使用 agent-auto 自动完成全流程:
|
||||||
|
|
||||||
```
|
```
|
||||||
autonomous: Add user notification system with email and in-app alerts
|
需求 → PRD → HTML 原型 → 设计评审 → 全栈代码 → 测试 → Bug 修复循环 → 完成
|
||||||
```
|
```
|
||||||
|
|
||||||
Or via CLI:
|
**运行命令:**
|
||||||
```bash
|
```bash
|
||||||
cd /path/to/jimeng-clone
|
cd /Users/maidong/Desktop/zyc/研究openclaw/agent-auto
|
||||||
~/.claude/plugins/marketplaces/claude-code-settings/plugins/autonomous-skill/skills/autonomous-skill/scripts/run-session.sh "Add user notification system"
|
|
||||||
|
# 增量需求(在已有项目上加功能)
|
||||||
|
npx tsx src/index.ts --resume /Users/maidong/Desktop/zyc/研究openclaw/视频生成平台/jimeng-clone "你的增量需求描述"
|
||||||
|
|
||||||
|
# 崩溃恢复 / 继续执行
|
||||||
|
npx tsx src/index.ts --resume /Users/maidong/Desktop/zyc/研究openclaw/视频生成平台/jimeng-clone
|
||||||
```
|
```
|
||||||
|
|
||||||
The autonomous skill will:
|
**agent-auto 会自动:**
|
||||||
1. Read this CLAUDE.md to understand the project
|
1. 读取 `.agent-auto/state.json` 恢复项目状态
|
||||||
2. Break the feature into 10-100 sub-tasks in `.autonomous/<task-name>/task_list.md`
|
2. product-agent 修订 PRD(`docs/prd.md`)
|
||||||
3. Execute across multiple sessions automatically
|
3. design-agent 更新 HTML 原型(`prototype/`)
|
||||||
4. Auto-update this CLAUDE.md with architectural changes after each session
|
4. product-agent 设计评审(`docs/design-review.md`,APPROVED/REJECTED 循环)
|
||||||
|
5. dev-agent 增量开发(保留已有代码,只新增/修改)
|
||||||
|
6. test-agent 测试 + Bug 分类(`test-report.md`)
|
||||||
|
7. Bug 修复循环(CODE_BUG → dev-agent / DESIGN_BUG → design-agent / REQUIREMENT_BUG → product-agent)
|
||||||
|
8. 全部通过 → COMPLETE
|
||||||
|
|
||||||
#### When to Use Which Approach
|
**状态持久化**:进度保存在 `.agent-auto/state.json`,中断后可随时 `--resume` 继续。
|
||||||
| Scenario | Approach |
|
|
||||||
|----------|----------|
|
**Agent 记忆**:每个 Agent 有独立记忆文件(`.agent-auto/{agent-name}/memory.md`),跨轮次保持上下文。
|
||||||
| Bug fix / single-line change | Direct AI |
|
|
||||||
| Small UI tweak (button, color, text) | Direct AI |
|
#### 变更日志维护
|
||||||
| Add a single API endpoint | Direct AI |
|
每次需求开发完成、测试验收通过后,**必须**在 `docs/changelog.md` 中记录本次变更:
|
||||||
| Modify existing component behavior | Direct AI |
|
- 按日期倒序添加新条目(最新的在最前面)
|
||||||
| New feature module (3+ files) | Autonomous |
|
- 包含:变更标题、状态/验收、变更内容、变更文件、触发原因
|
||||||
| Add entire admin page with CRUD | Autonomous |
|
- 文件末尾有模板可直接复制使用
|
||||||
| Refactor across multiple files | Autonomous |
|
- Direct AI 和 agent-auto 两种方式均需记录
|
||||||
| Add new subsystem (notifications, payments) | Autonomous |
|
|
||||||
|
#### 何时用哪种方式
|
||||||
|
| 场景 | 方式 |
|
||||||
|
|------|------|
|
||||||
|
| Bug 修复 / 单行改动 | Direct AI |
|
||||||
|
| UI 微调(按钮、颜色、文案) | Direct AI |
|
||||||
|
| 添加单个 API 端点 | Direct AI |
|
||||||
|
| 修改已有组件行为 | Direct AI |
|
||||||
|
| 新功能模块(3+ 文件) | agent-auto |
|
||||||
|
| 新增整页 CRUD(如管理页面) | agent-auto |
|
||||||
|
| 跨多文件重构 | agent-auto |
|
||||||
|
| 新增子系统(通知、支付、权限) | agent-auto |
|
||||||
|
|
||||||
### How to Add a New Page
|
### How to Add a New Page
|
||||||
|
|
||||||
@ -329,6 +346,8 @@ The autonomous skill will:
|
|||||||
|
|
||||||
## Change History
|
## Change History
|
||||||
|
|
||||||
|
> 完整变更日志见 [`docs/changelog.md`](docs/changelog.md),以下为摘要。
|
||||||
|
|
||||||
| Date | Change | Scope |
|
| Date | Change | Scope |
|
||||||
|------|--------|-------|
|
|------|--------|-------|
|
||||||
| 2025-01 | Phase 1: Core video generation UI | Frontend |
|
| 2025-01 | Phase 1: Core video generation UI | Frontend |
|
||||||
@ -338,6 +357,10 @@ The autonomous skill will:
|
|||||||
| 2026-03-13 | Phase 4: TOS upload + Seedance API integration + DB persistence | Full stack |
|
| 2026-03-13 | Phase 4: TOS upload + Seedance API integration + DB persistence | Full stack |
|
||||||
| 2026-03-13 | Test DB isolation: TESTING=true → test_db.sqlite3, Playwright auto-starts test backend | Backend + Config |
|
| 2026-03-13 | Test DB isolation: TESTING=true → test_db.sqlite3, Playwright auto-starts test backend | Backend + Config |
|
||||||
| 2026-03-13 | Removed mock data fallback from DashboardPage — charts show real data only | Frontend |
|
| 2026-03-13 | Removed mock data fallback from DashboardPage — charts show real data only | Frontend |
|
||||||
|
| 2026-03-13 | LogCenterMiddleware: Django 中间件兜底异常上报(捕获 DRF 之外的导入/中间件/URL 解析错误) | Backend |
|
||||||
|
| 2026-03-13 | custom_exception_handler: 未处理异常返回 JSON 500 而非 HTML | Backend |
|
||||||
|
| 2026-03-13 | 前端轮询间隔从 5 秒改为 3 分钟 | Frontend |
|
||||||
|
| 2026-03-13 | CLAUDE.md 增量开发指南更新为 agent-auto(替换 Autonomous Skill) | Documentation |
|
||||||
|
|
||||||
### Phase 4 Details (2026-03-13)
|
### Phase 4 Details (2026-03-13)
|
||||||
|
|
||||||
|
|||||||
@ -4,5 +4,16 @@ set -e
|
|||||||
echo "Running database migrations..."
|
echo "Running database migrations..."
|
||||||
python manage.py migrate --noinput
|
python manage.py migrate --noinput
|
||||||
|
|
||||||
|
echo "Creating superuser if not exists..."
|
||||||
|
python manage.py shell -c "
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
User = get_user_model()
|
||||||
|
if not User.objects.filter(username='admin').exists():
|
||||||
|
User.objects.create_superuser('admin', 'admin@example.com', 'admin123')
|
||||||
|
print('Superuser created.')
|
||||||
|
else:
|
||||||
|
print('Superuser already exists.')
|
||||||
|
"
|
||||||
|
|
||||||
echo "Starting server..."
|
echo "Starting server..."
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|||||||
149
docs/changelog.md
Normal file
149
docs/changelog.md
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
# 需求变更日志 (Changelog)
|
||||||
|
|
||||||
|
> 按日期倒序记录每次需求变更。每条记录在开发完成、测试验收通过后归档。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-13 — 异常上报体系优化 + 轮询策略调整
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **LogCenterMiddleware** — 新增 Django 中间件,捕获 DRF 之外的异常(导入错误、中间件异常、URL 解析失败),上报日志中台
|
||||||
|
2. **custom_exception_handler 优化** — 未处理异常返回 JSON `{'error': '...'}` 而非 HTML 500
|
||||||
|
3. **轮询间隔调整** — 前端视频生成任务轮询从 5 秒改为 3 分钟(Seedance 生成耗时 2-5 分钟)
|
||||||
|
4. **CLAUDE.md 更新** — 增量开发指南从 "Autonomous Skill" 修正为 "agent-auto"
|
||||||
|
|
||||||
|
### 变更文件
|
||||||
|
| 文件 | 改动 |
|
||||||
|
|------|------|
|
||||||
|
| `backend/utils/log_center.py` | 新增 LogCenterMiddleware + 优化 custom_exception_handler |
|
||||||
|
| `backend/config/settings.py` | MIDDLEWARE 列表首位加入中间件 |
|
||||||
|
| `web/src/store/generation.ts` | 轮询间隔 5000ms → 180000ms |
|
||||||
|
| `CLAUDE.md` | 增量开发指南更新 |
|
||||||
|
|
||||||
|
### 触发原因
|
||||||
|
- 线上 `/api/v1/video/tasks` 返回 500,日志中台未收到错误上报
|
||||||
|
- 视频生成轮询过于频繁,增加后端负载
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-13 — Phase 4: TOS 存储 + Seedance API 集成
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **TOS 文件上传** — 火山引擎 TOS(S3 兼容)上传,`POST /api/v1/media/upload`
|
||||||
|
2. **Seedance API 对接** — 火山方舟 Seedance 视频生成 API,异步 create_task + query_task
|
||||||
|
3. **数据库持久化** — GenerationRecord 新增 ark_task_id、result_url、error_message、reference_urls
|
||||||
|
4. **前端重写** — generation store 完全重写:TOS 上传 → API 调用 → 轮询 → 展示结果
|
||||||
|
5. **页面刷新持久化** — `loadTasks()` 从数据库加载历史任务
|
||||||
|
|
||||||
|
### 新增/变更 API
|
||||||
|
| 端点 | 方法 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `/api/v1/media/upload` | POST | 上传文件到 TOS |
|
||||||
|
| `/api/v1/video/generate` | POST | 创建 Seedance 任务(改写) |
|
||||||
|
| `/api/v1/video/tasks` | GET | 用户任务列表(新增) |
|
||||||
|
| `/api/v1/video/tasks/<uuid>` | GET | 单任务状态轮询(新增) |
|
||||||
|
|
||||||
|
### 变更文件
|
||||||
|
| 文件 | 改动 |
|
||||||
|
|------|------|
|
||||||
|
| `backend/utils/tos_client.py` | 新增:TOS 上传客户端 |
|
||||||
|
| `backend/utils/seedance_client.py` | 新增:Seedance API 客户端 |
|
||||||
|
| `backend/config/settings.py` | TOS + ARK 配置 |
|
||||||
|
| `backend/apps/generation/models.py` | 4 个新字段 |
|
||||||
|
| `backend/apps/generation/views.py` | 3 个新端点 + 重写 generate |
|
||||||
|
| `backend/apps/generation/urls.py` | 3 条新路由 |
|
||||||
|
| `backend/apps/generation/serializers.py` | references 字段 |
|
||||||
|
| `backend/requirements.txt` | tos>=2.7, requests>=2.31 |
|
||||||
|
| `web/src/store/generation.ts` | 完全重写 |
|
||||||
|
| `web/src/types/index.ts` | BackendTask 接口 |
|
||||||
|
| `web/src/lib/api.ts` | mediaApi + videoApi |
|
||||||
|
| `web/src/components/VideoGenerationPage.tsx` | loadTasks on mount |
|
||||||
|
| `web/src/components/GenerationCard.tsx` | 视频播放器 + 错误态 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-13 — 测试隔离 + Mock 数据清理
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **测试 DB 隔离** — `TESTING=true` 环境变量切换到 `test_db.sqlite3`,Playwright 自动启动测试后端
|
||||||
|
2. **移除 Mock 数据兜底** — DashboardPage 图表仅显示真实数据,无 mock fallback
|
||||||
|
|
||||||
|
### 触发原因
|
||||||
|
- E2E 测试会污染开发数据库
|
||||||
|
- Dashboard 应展示真实数据而非虚假 Mock
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-12 — Phase 3: 秒数计量 + 管理后台重做 + 个人中心
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过(agent-auto 自动测试)
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **计量单位变更** — 所有「调用次数」改为「生成秒数」(daily_seconds_limit / monthly_seconds_limit)
|
||||||
|
2. **管理后台重做** — Sidebar 多页面布局,4 个子路由:
|
||||||
|
- `/admin/dashboard` — 仪表盘 + ECharts 折线图 + 排行柱状图
|
||||||
|
- `/admin/users` — 用户管理(分页、搜索、配额编辑、启用/禁用)
|
||||||
|
- `/admin/records` — 消费记录(时间筛选、导出 CSV)
|
||||||
|
- `/admin/settings` — 系统设置 + 公告管理
|
||||||
|
3. **用户个人中心** (`/profile`) — ECharts 环形进度条 + Sparkline + 消费记录
|
||||||
|
4. **8 个新 API 端点** — admin: stats/users/users/:id/quota/status/records + profile: overview/records
|
||||||
|
|
||||||
|
### 设计规范
|
||||||
|
- 深色主题(Linear/Vercel 风格)
|
||||||
|
- ECharts + echarts-for-react
|
||||||
|
- Arco Design 组件库优先
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-12 — Phase 2: 后端 + 用户认证 + 管理面板
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过(agent-auto 自动测试)
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **Django 后端** — Django 4.2 + DRF + MySQL 云数据库
|
||||||
|
2. **JWT 认证** — SimpleJWT + 前端 Token 自动刷新
|
||||||
|
3. **用户系统** — 登录 `/login` + 注册 `/register`
|
||||||
|
4. **管理后台** — 基础仪表盘 + 用户配额管理
|
||||||
|
5. **9 个新 API 端点** — 认证 4 个 + 管理 3 个 + 已有接口认证 2 个
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2025 — Phase 1: 核心视频生成 UI
|
||||||
|
|
||||||
|
**状态**: ✅ 已完成 | **验收**: ✅ 通过(92 单元测试 + 14 E2E 测试)
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. **视频生成页** — 全能参考/首尾帧双模式
|
||||||
|
2. **InputBar** — contentEditable 富文本 + @ mention
|
||||||
|
3. **深色主题 UI** — `#0a0a0f` 背景 + Arco Design
|
||||||
|
4. **状态管理** — Zustand store
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模板(新增变更请复制此模板)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## YYYY-MM-DD — 变更标题
|
||||||
|
|
||||||
|
**状态**: 🔲 开发中 / ✅ 已完成 | **验收**: 🔲 待验收 / ✅ 通过 / ❌ 未通过
|
||||||
|
|
||||||
|
### 变更内容
|
||||||
|
1. ...
|
||||||
|
|
||||||
|
### 变更文件
|
||||||
|
| 文件 | 改动 |
|
||||||
|
|------|------|
|
||||||
|
| `path/to/file` | 描述 |
|
||||||
|
|
||||||
|
### 触发原因
|
||||||
|
- ...
|
||||||
|
|
||||||
|
### 备注
|
||||||
|
- ...
|
||||||
|
```
|
||||||
@ -50,6 +50,14 @@ spec:
|
|||||||
value: "true"
|
value: "true"
|
||||||
- name: ENVIRONMENT
|
- name: ENVIRONMENT
|
||||||
value: "production"
|
value: "production"
|
||||||
|
# Seedance API (from Secret)
|
||||||
|
- name: ARK_API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: video-backend-secrets
|
||||||
|
key: ARK_API_KEY
|
||||||
|
- name: SEEDANCE_ENABLED
|
||||||
|
value: "true"
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz/
|
path: /healthz/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user