dograh/api/alembic/versions/cdcf9f65913b_add_workflow_uuid.py
2026-04-25 19:44:44 +05:30

49 lines
1.3 KiB
Python

"""add workflow_uuid
Revision ID: cdcf9f65913b
Revises: a1b2c3d4e5f6
Create Date: 2026-04-25 18:24:45.954049
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "cdcf9f65913b"
down_revision: Union[str, None] = "a1b2c3d4e5f6"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# 1. Add the column as nullable so existing rows are accepted.
op.add_column(
"workflows",
sa.Column("workflow_uuid", sa.String(length=36), nullable=True),
)
# 2. Backfill UUIDs for existing rows. gen_random_uuid() is built-in on
# PostgreSQL 13+; cast to text to match the String(36) column type.
op.execute(
"UPDATE workflows SET workflow_uuid = gen_random_uuid()::text "
"WHERE workflow_uuid IS NULL"
)
# 3. Now that every row has a value, enforce NOT NULL.
op.alter_column("workflows", "workflow_uuid", nullable=False)
# 4. Create the unique index.
op.create_index(
op.f("ix_workflows_workflow_uuid"),
"workflows",
["workflow_uuid"],
unique=True,
)
def downgrade() -> None:
op.drop_index(op.f("ix_workflows_workflow_uuid"), table_name="workflows")
op.drop_column("workflows", "workflow_uuid")