diff --git a/alembic/versions/089_viral_video_storyboard_backfill.py b/alembic/versions/089_viral_video_storyboard_backfill.py new file mode 100644 index 000000000..1f0786919 --- /dev/null +++ b/alembic/versions/089_viral_video_storyboard_backfill.py @@ -0,0 +1,49 @@ +"""viral video add storyboard + generated_copy_text (complement 088) + +Revision ID: 089_viral_video_storyboard_backfill +Revises: 088_viral_video_copy_result +Create Date: 2026-10-01 + +#2129 兜底迁移:补齐 _VIRAL_VIDEO_BACKFILL_COLS 中所有列,覆盖 +# watchtower 自动部署未跑历史 migration、且 AUTO_CREATE_SCHEMA=false 时 +# _ensure_viral_video_columns 未执行的场景。 +# 幂等 ADD COLUMN IF NOT EXISTS,已存在则跳过。 +""" + +import sqlalchemy as sa + +from alembic import op + +revision = "089_viral_video_storyboard_backfill" +down_revision = "088_viral_video_copy_result" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + cols = [ + ("storyboard", "JSON"), + ("generated_copy_text", "TEXT NOT NULL DEFAULT ''"), + ("voice_id", "VARCHAR(200) NOT NULL DEFAULT ''"), + ("voice_source", "VARCHAR(20) NOT NULL DEFAULT ''"), + ("video_ratio", "VARCHAR(10) NOT NULL DEFAULT '9:16'"), + ("video_model", "VARCHAR(100) NOT NULL DEFAULT ''"), + ("copy_result", "JSON"), + ] + conn = op.get_bind() + for name, ddl in cols: + try: + conn.execute(sa.text(f"ALTER TABLE viral_video_jobs ADD COLUMN IF NOT EXISTS {name} {ddl}")) + except Exception: + try: + conn.execute(sa.text(f"ALTER TABLE viral_video_jobs ADD COLUMN {name} {ddl}")) + except Exception: + pass + + +def downgrade() -> None: + for name in ("copy_result", "video_model", "video_ratio", "voice_source", "voice_id", "generated_copy_text", "storyboard"): + try: + op.drop_column("viral_video_jobs", name) + except Exception: + pass