3b6b32d561
实现预览生成功能的后端 Phase 1:单版本预览接口(创建 + 查询)。 变更内容: - 领域模型 GenerationTask 新增 is_preview: bool = False 字段 - SQLAlchemy GenerationTaskModel 新增 is_preview 列(带索引) - 新增 alembic migration 053_generation_task_is_preview - 仓储层 _to_domain/create/update 同步 is_preview 字段(getattr 兼容旧数据) - CreateGenerationTaskCommand/UseCase 新增 is_preview 参数 - Schema 新增 CreatePreviewGenerationTaskRequest 和 PreviewGenerationTaskResponse - 新增 /api/v1/generation/preview 路由(POST 创建 + GET 查询) - Worker generate_video 检测 is_preview=True 时强制 854x480 + 1M 低码率 - 新增 29 个单元测试,全部通过 验收: - ✅ 所有新增文件写完,所有修改点完成 - ✅ 单元测试 29 个,全部通过 - ✅ 现有 generation 相关 174 个测试全部通过 - ✅ 代码通过 ruff + black 检查 - ✅ 在 feat/preview-generation-1197 分支上
62 lines
1.8 KiB
Python
Executable File
62 lines
1.8 KiB
Python
Executable File
"""#1197 - 预览生成:generation_tasks 表新增 is_preview 字段
|
|
|
|
Revision ID: 053
|
|
Revises: 052
|
|
Create Date: 2026-08-15
|
|
|
|
Changes:
|
|
1. generation_tasks 表新增 is_preview 字段,标记是否为预览生成任务(低清 480p)
|
|
2. 默认 False,与现有正式生成任务兼容
|
|
3. 加索引以支持按预览/正式任务筛选
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import context, op
|
|
|
|
revision = "053_generation_task_is_preview"
|
|
down_revision = "052_generation_task_bgm_config"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
conn = op.get_bind()
|
|
if context.get_context().dialect.name == "postgresql":
|
|
# 检查列是否已存在(幂等)
|
|
result = conn.execute(
|
|
sa.text(
|
|
"SELECT column_name FROM information_schema.columns "
|
|
"WHERE table_name = 'generation_tasks' AND column_name = 'is_preview'"
|
|
)
|
|
)
|
|
if result.scalar() is not None:
|
|
return
|
|
|
|
op.add_column(
|
|
"generation_tasks",
|
|
sa.Column("is_preview", sa.Boolean, nullable=False, server_default=sa.text("false")),
|
|
)
|
|
# 加索引
|
|
op.create_index(
|
|
"ix_generation_tasks_is_preview",
|
|
"generation_tasks",
|
|
["is_preview"],
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
conn = op.get_bind()
|
|
if context.get_context().dialect.name == "postgresql":
|
|
result = conn.execute(
|
|
sa.text(
|
|
"SELECT column_name FROM information_schema.columns "
|
|
"WHERE table_name = 'generation_tasks' AND column_name = 'is_preview'"
|
|
)
|
|
)
|
|
if result.scalar() is None:
|
|
return
|
|
|
|
op.drop_index("ix_generation_tasks_is_preview", table_name="generation_tasks")
|
|
op.drop_column("generation_tasks", "is_preview")
|