hesabixArc/hesabixAPI/migrations/versions/20250926_000010_add_person_code.py

48 lines
1.5 KiB
Python
Raw Normal View History

2025-09-26 23:05:20 +03:30
from alembic import op
import sqlalchemy as sa
2025-09-27 21:19:00 +03:30
from sqlalchemy import inspect
2025-09-26 23:05:20 +03:30
# revision identifiers, used by Alembic.
2025-10-15 21:21:11 +03:30
revision = '20250926_000010_add_person_code'
2025-09-26 23:05:20 +03:30
down_revision = '20250916_000002'
branch_labels = None
depends_on = None
def upgrade() -> None:
2025-09-27 21:19:00 +03:30
bind = op.get_bind()
inspector = inspect(bind)
2025-09-28 23:06:53 +03:30
# اگر جدول persons وجود ندارد، این مایگریشن را نادیده بگیر
if 'persons' not in inspector.get_table_names():
return
cols = {c['name'] for c in inspector.get_columns('persons')}
2025-09-26 23:05:20 +03:30
with op.batch_alter_table('persons') as batch_op:
2025-09-27 21:19:00 +03:30
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'])
2025-09-26 23:05:20 +03:30
def downgrade() -> None:
2025-09-28 23:06:53 +03:30
bind = op.get_bind()
inspector = inspect(bind)
if 'persons' not in inspector.get_table_names():
return
2025-09-26 23:05:20 +03:30
with op.batch_alter_table('persons') as batch_op:
2025-09-28 23:06:53 +03:30
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