feat(#632): 一键生成输出分辨率可配置 #749

Merged
auto-approve-bot merged 1 commits from feat/oneclick-resolution-config into develop 2026-07-23 10:27:37 +08:00
Owner

变更内容

修复 #632 — 一键生成输出分辨率可配置

核心改动

  • DB: generation_tasks 表新增 resolution 字段(migration 051,幂等)
  • API: CreateGenerationTaskRequest / GenerationTaskResponse 新增 resolution 字段
  • Application: CreateGenerationTaskCommand 透传 resolution
  • Domain: GenerationTask 实体新增 resolution 属性
  • Repository: SQLAlchemy 层 create/update/to_domain 全链路透传
  • Worker: _render_video 接收 resolution 参数,优先级:用户指定 > 模板配置 > 默认 1280x720
  • 重试: 重试任务保留原分辨率设置

验证

  • 125 个 generation 相关单测全部通过
  • migration 幂等(PostgreSQL 下先查列是否存在)
  • 向后兼容:resolution 为空时完全等价于旧行为
## 变更内容 修复 #632 — 一键生成输出分辨率可配置 ### 核心改动 - **DB**: generation_tasks 表新增 resolution 字段(migration 051,幂等) - **API**: CreateGenerationTaskRequest / GenerationTaskResponse 新增 resolution 字段 - **Application**: CreateGenerationTaskCommand 透传 resolution - **Domain**: GenerationTask 实体新增 resolution 属性 - **Repository**: SQLAlchemy 层 create/update/to_domain 全链路透传 - **Worker**: _render_video 接收 resolution 参数,优先级:用户指定 > 模板配置 > 默认 1280x720 - **重试**: 重试任务保留原分辨率设置 ### 验证 - 125 个 generation 相关单测全部通过 - migration 幂等(PostgreSQL 下先查列是否存在) - 向后兼容:resolution 为空时完全等价于旧行为
xiaoxia added 1 commit 2026-07-23 10:22:45 +08:00
feat(#632): 一键生成输出分辨率可配置
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 41s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 42s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 40s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m28s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 56s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 46s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m10s
AI Code Review / AI Code Review (pull_request) Successful in 4m13s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m19s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 53s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 43s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m53s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 17m17s
66dd02e03a
- generation_tasks 表新增 resolution 字段(migration 051)
- API 请求/响应新增 resolution 参数,格式 WIDTHxHEIGHT(如 1080x1920)
- 渲染优先级:用户指定 > 模板配置 > 默认 1280x720
- 领域模型 + Command + Repository 全链路透传
- 重试任务保留原分辨率
- 125 个相关单测全绿

Closes #632
auto-approve-bot approved these changes 2026-07-23 10:25:28 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-23 10:25:28 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

项目 详情
PR号 #749
预览链接 https://pr-749.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #749 | | 预览链接 | [https://pr-749.preview.xiaoxiajianji.com](https://pr-749.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit 9d3a8852e5 into develop 2026-07-23 10:27:37 +08:00
auto-approve-bot deleted branch feat/oneclick-resolution-config 2026-07-23 10:27:37 +08:00
Collaborator

代码审查结果 - PR #749

⚠️ 问题(2个需要修改)

  1. apps/api/app/schemas/generation_task.py 第49行:缺少对 resolution 字段格式的校验。

    • 问题描述:当前仅通过 description 描述了格式要求("WIDTHxHEIGHT"),但代码层面没有进行正则校验。用户可以传入任意字符串(如 "abc"、"0x0" 或 "-1x-1"),这些无效数据会被传递到底层渲染引擎,可能导致渲染任务失败或资源浪费。
    • 修改建议:添加 @field_validator 或使用 regex 参数限制格式,例如 pattern=r"^\d+x\d+$",并增加合理的数值范围检查(如 10-7680)。
  2. alembic/versions/051_generation_task_resolution.py 第36行:数据库迁移脚本在非 PostgreSQL 数据库下不具备幂等性。

    • 问题描述:代码仅对 PostgreSQL 执行了列存在性检查。如果该迁移在 SQLite(常用于测试环境)或其他数据库上重复执行,由于没有检查列是否存在,直接调用 op.add_column 会抛出 "duplicate column name" 错误导致迁移失败。
    • 修改建议:使用 op.execute 配合 ALTER TABLE ... IF NOT EXISTS(如果DB支持)或使用 batch_alter_table 配合 sa.inspect 来实现跨数据库的幂等检查,或者统一使用 try-except 捕获重复列异常。

💡 建议(1个可选)

  1. packages/domain/generation_task.py 第139行:建议增强 strip() 操作的健壮性。
    • 具体内容:虽然 Pydantic 层面通常保证非 None,但在 Domain 层核心逻辑中,直接调用 resolution.strip() 存在理论上的 AttributeError 风险(如果被非 API 入口直接调用并传入 None)。建议修改为 (resolution or "").strip() 以确保绝对安全。

格式检查通过 | 逻辑审查需修改 | 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 10:28:39 | 模型:

## 代码审查结果 - PR #749 ### ⚠️ 问题(2个需要修改) 1. **apps/api/app/schemas/generation_task.py 第49行**:缺少对 `resolution` 字段格式的校验。 - 问题描述:当前仅通过 `description` 描述了格式要求("WIDTHxHEIGHT"),但代码层面没有进行正则校验。用户可以传入任意字符串(如 "abc"、"0x0" 或 "-1x-1"),这些无效数据会被传递到底层渲染引擎,可能导致渲染任务失败或资源浪费。 - 修改建议:添加 `@field_validator` 或使用 `regex` 参数限制格式,例如 `pattern=r"^\d+x\d+$"`,并增加合理的数值范围检查(如 10-7680)。 2. **alembic/versions/051_generation_task_resolution.py 第36行**:数据库迁移脚本在非 PostgreSQL 数据库下不具备幂等性。 - 问题描述:代码仅对 PostgreSQL 执行了列存在性检查。如果该迁移在 SQLite(常用于测试环境)或其他数据库上重复执行,由于没有检查列是否存在,直接调用 `op.add_column` 会抛出 "duplicate column name" 错误导致迁移失败。 - 修改建议:使用 `op.execute` 配合 `ALTER TABLE ... IF NOT EXISTS`(如果DB支持)或使用 `batch_alter_table` 配合 `sa.inspect` 来实现跨数据库的幂等检查,或者统一使用 try-except 捕获重复列异常。 ### 💡 建议(1个可选) 1. **packages/domain/generation_task.py 第139行**:建议增强 `strip()` 操作的健壮性。 - 具体内容:虽然 Pydantic 层面通常保证非 None,但在 Domain 层核心逻辑中,直接调用 `resolution.strip()` 存在理论上的 `AttributeError` 风险(如果被非 API 入口直接调用并传入 None)。建议修改为 `(resolution or "").strip()` 以确保绝对安全。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 10:28:39 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🗑️ 预览环境已清理

PR #749 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #749 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.