48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy import inspect
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '20250926_000010_add_person_code'
|
|
down_revision = '20250916_000002'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
bind = op.get_bind()
|
|
inspector = inspect(bind)
|
|
# اگر جدول persons وجود ندارد، این مایگریشن را نادیده بگیر
|
|
if 'persons' not in inspector.get_table_names():
|
|
return
|
|
cols = {c['name'] for c in inspector.get_columns('persons')}
|
|
with op.batch_alter_table('persons') as batch_op:
|
|
if 'code' not in cols:
|
|
batch_op.add_column(sa.Column('code', sa.Integer(), nullable=True))
|
|
if 'person_types' not in cols:
|
|
batch_op.add_column(sa.Column('person_types', sa.Text(), nullable=True))
|
|
# unique constraint if not exists
|
|
existing_uniques = {uc['name'] for uc in inspector.get_unique_constraints('persons')}
|
|
if 'uq_persons_business_code' not in existing_uniques:
|
|
batch_op.create_unique_constraint('uq_persons_business_code', ['business_id', 'code'])
|
|
|
|
|
|
def downgrade() -> None:
|
|
bind = op.get_bind()
|
|
inspector = inspect(bind)
|
|
if 'persons' not in inspector.get_table_names():
|
|
return
|
|
with op.batch_alter_table('persons') as batch_op:
|
|
try:
|
|
batch_op.drop_constraint('uq_persons_business_code', type_='unique')
|
|
except Exception:
|
|
pass
|
|
try:
|
|
batch_op.drop_column('person_types')
|
|
except Exception:
|
|
pass
|
|
try:
|
|
batch_op.drop_column('code')
|
|
except Exception:
|
|
pass
|