68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
"""release_a_clients_engagement_mode
|
|
|
|
Revision ID: 20260414_release_a_clients
|
|
Revises: 7f1c9b2d4a10
|
|
Create Date: 2026-04-14
|
|
"""
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
revision = "20260414_release_a_clients"
|
|
down_revision = "7f1c9b2d4a10"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def _has_column(table_name: str, column_name: str) -> bool:
|
|
bind = op.get_bind()
|
|
inspector = sa.inspect(bind)
|
|
return column_name in [c["name"] for c in inspector.get_columns(table_name)]
|
|
|
|
|
|
def upgrade():
|
|
# On the original production database this column was added out-of-band,
|
|
# outside of tracked migration history. On a fresh database (new env,
|
|
# new backend such as Postgres) it does not exist yet, so create it
|
|
# defensively here instead of assuming it's already present.
|
|
if not _has_column("clients", "engagement_mode"):
|
|
op.add_column(
|
|
"clients",
|
|
sa.Column(
|
|
"engagement_mode",
|
|
sa.String(length=30),
|
|
nullable=False,
|
|
server_default="internal_managed",
|
|
),
|
|
)
|
|
|
|
# Make partner_id nullable in a SQLite-safe way
|
|
with op.batch_alter_table("clients") as batch_op:
|
|
batch_op.alter_column(
|
|
"partner_id",
|
|
existing_type=sa.Integer(),
|
|
nullable=True,
|
|
)
|
|
|
|
# Remove server default from engagement_mode if it exists
|
|
with op.batch_alter_table("clients") as batch_op:
|
|
batch_op.alter_column(
|
|
"engagement_mode",
|
|
existing_type=sa.String(length=30),
|
|
server_default=None,
|
|
)
|
|
|
|
|
|
def downgrade():
|
|
# Revert partner_id back to NOT NULL
|
|
with op.batch_alter_table("clients") as batch_op:
|
|
batch_op.alter_column(
|
|
"partner_id",
|
|
existing_type=sa.Integer(),
|
|
nullable=False,
|
|
)
|
|
|
|
# Drop engagement_mode
|
|
with op.batch_alter_table("clients") as batch_op:
|
|
batch_op.drop_column("engagement_mode") |