From 9c307c663d711359e96f975ac10d77c2de56f68b Mon Sep 17 00:00:00 2001 From: jlightner Date: Sat, 4 Apr 2026 07:17:34 +0000 Subject: [PATCH] fix: use String column + ALTER TYPE cast for enum migrations (avoids SQLAlchemy before_create hook) --- alembic/versions/019_add_highlight_candidates.py | 6 ++++-- alembic/versions/020_add_chapter_status_and_sort_order.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/alembic/versions/019_add_highlight_candidates.py b/alembic/versions/019_add_highlight_candidates.py index 277b030..f22e999 100644 --- a/alembic/versions/019_add_highlight_candidates.py +++ b/alembic/versions/019_add_highlight_candidates.py @@ -16,7 +16,7 @@ depends_on = None def upgrade() -> None: - # Create enum via raw SQL to avoid SQLAlchemy's double-creation issue + # Create enum via raw SQL op.execute("CREATE TYPE highlight_status AS ENUM ('candidate', 'approved', 'rejected')") op.create_table( @@ -27,10 +27,12 @@ def upgrade() -> None: sa.Column("score", sa.Float, nullable=False), sa.Column("score_breakdown", sa.dialects.postgresql.JSONB, nullable=True), sa.Column("duration_secs", sa.Float, nullable=False), - sa.Column("status", sa.Enum("candidate", "approved", "rejected", name="highlight_status", create_type=False), nullable=False, server_default="candidate"), + sa.Column("status", sa.String(20), nullable=False, server_default="candidate"), sa.Column("created_at", sa.DateTime, server_default=sa.func.now(), nullable=False), sa.Column("updated_at", sa.DateTime, server_default=sa.func.now(), nullable=False), ) + # Change column type to use the enum + op.execute("ALTER TABLE highlight_candidates ALTER COLUMN status TYPE highlight_status USING status::highlight_status") op.create_index("ix_highlight_candidates_source_video_id", "highlight_candidates", ["source_video_id"]) op.create_index("ix_highlight_candidates_score_desc", "highlight_candidates", [sa.text("score DESC")]) op.create_index("ix_highlight_candidates_status", "highlight_candidates", ["status"]) diff --git a/alembic/versions/020_add_chapter_status_and_sort_order.py b/alembic/versions/020_add_chapter_status_and_sort_order.py index 2bccd3a..c981bfd 100644 --- a/alembic/versions/020_add_chapter_status_and_sort_order.py +++ b/alembic/versions/020_add_chapter_status_and_sort_order.py @@ -15,13 +15,15 @@ depends_on = None def upgrade() -> None: - # Create enum via raw SQL to avoid SQLAlchemy's double-creation issue + # Create enum via raw SQL op.execute("CREATE TYPE chapter_status AS ENUM ('draft', 'approved', 'hidden')") op.add_column( "key_moments", - sa.Column("chapter_status", sa.Enum("draft", "approved", "hidden", name="chapter_status", create_type=False), nullable=False, server_default="draft"), + sa.Column("chapter_status", sa.String(20), nullable=False, server_default="draft"), ) + # Change column type to use the enum + op.execute("ALTER TABLE key_moments ALTER COLUMN chapter_status TYPE chapter_status USING chapter_status::chapter_status") op.add_column( "key_moments", sa.Column("sort_order", sa.Integer, nullable=False, server_default="0"),