58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""add organization member support
|
|||
|
|
|
||
|
|
Revision ID: b61b6b2d83cc
|
||
|
|
Revises: 0f79356844b5
|
||
|
|
Create Date: 2025-12-04 12:03:16.548989
|
||
|
|
|
||
|
|
"""
|
||
|
|
from typing import Sequence, Union
|
||
|
|
|
||
|
|
from alembic import op
|
||
|
|
import sqlalchemy as sa
|
||
|
|
|
||
|
|
|
||
|
|
# revision identifiers, used by Alembic.
|
||
|
|
revision: str = 'b61b6b2d83cc'
|
||
|
|
down_revision: Union[str, Sequence[str], None] = '0f79356844b5'
|
||
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
||
|
|
depends_on: Union[str, Sequence[str], None] = None
|
||
|
|
|
||
|
|
|
||
|
|
def upgrade() -> None:
|
||
|
|
"""Upgrade schema."""
|
||
|
|
# Add member_type column with default 'INDIVIDUAL'
|
||
|
|
op.add_column(
|
||
|
|
'members',
|
||
|
|
sa.Column('member_type', sa.String(length=20), nullable=False, server_default='INDIVIDUAL')
|
||
|
|
)
|
||
|
|
|
||
|
|
# Add company_name column (nullable)
|
||
|
|
op.add_column(
|
||
|
|
'members',
|
||
|
|
sa.Column('company_name', sa.String(length=200), nullable=True)
|
||
|
|
)
|
||
|
|
|
||
|
|
# Alter first_name to be nullable (SQLite compatible using batch operations)
|
||
|
|
with op.batch_alter_table('members', schema=None) as batch_op:
|
||
|
|
batch_op.alter_column(
|
||
|
|
'first_name',
|
||
|
|
existing_type=sa.String(length=100),
|
||
|
|
nullable=True
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def downgrade() -> None:
|
||
|
|
"""Downgrade schema."""
|
||
|
|
# Remove company_name and member_type columns
|
||
|
|
op.drop_column('members', 'company_name')
|
||
|
|
op.drop_column('members', 'member_type')
|
||
|
|
|
||
|
|
# Revert first_name to nullable=False
|
||
|
|
# Note: This may fail if there are organization members without first_name
|
||
|
|
with op.batch_alter_table('members', schema=None) as batch_op:
|
||
|
|
batch_op.alter_column(
|
||
|
|
'first_name',
|
||
|
|
existing_type=sa.String(length=100),
|
||
|
|
nullable=False
|
||
|
|
)
|