Files
membership-be/alembic/versions/002_add_missing_user_fields.py
2026-01-04 22:01:26 +07:00

76 lines
3.1 KiB
Python

"""add_missing_user_fields
Revision ID: 002_add_missing_user_fields
Revises: 001_initial_baseline
Create Date: 2026-01-04
Adds missing user fields to sync models.py with database:
- scholarship_reason
- directory_* fields (email, bio, address, phone, dob, partner_name)
- profile_photo_url (rename from profile_image_url)
- social_media_* fields (facebook, instagram, twitter, linkedin)
- email_verification_expires
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '002_add_missing_user_fields'
down_revision: Union[str, None] = '001_initial_baseline'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Add missing user fields"""
# Add scholarship_reason
op.add_column('users', sa.Column('scholarship_reason', sa.Text(), nullable=True))
# Add directory fields
op.add_column('users', sa.Column('directory_email', sa.String(), nullable=True))
op.add_column('users', sa.Column('directory_bio', sa.Text(), nullable=True))
op.add_column('users', sa.Column('directory_address', sa.String(), nullable=True))
op.add_column('users', sa.Column('directory_phone', sa.String(), nullable=True))
op.add_column('users', sa.Column('directory_dob', sa.DateTime(), nullable=True))
op.add_column('users', sa.Column('directory_partner_name', sa.String(), nullable=True))
# Rename profile_image_url to profile_photo_url (for consistency with models.py)
op.alter_column('users', 'profile_image_url', new_column_name='profile_photo_url')
# Add social media fields
op.add_column('users', sa.Column('social_media_facebook', sa.String(), nullable=True))
op.add_column('users', sa.Column('social_media_instagram', sa.String(), nullable=True))
op.add_column('users', sa.Column('social_media_twitter', sa.String(), nullable=True))
op.add_column('users', sa.Column('social_media_linkedin', sa.String(), nullable=True))
# Add email_verification_expires (exists in DB but not in models.py initially)
# Check if it already exists, if not add it
# This field should already exist from the initial schema, but adding for completeness
def downgrade() -> None:
"""Remove added fields (rollback)"""
# Remove social media fields
op.drop_column('users', 'social_media_linkedin')
op.drop_column('users', 'social_media_twitter')
op.drop_column('users', 'social_media_instagram')
op.drop_column('users', 'social_media_facebook')
# Rename profile_photo_url back to profile_image_url
op.alter_column('users', 'profile_photo_url', new_column_name='profile_image_url')
# Remove directory fields
op.drop_column('users', 'directory_partner_name')
op.drop_column('users', 'directory_dob')
op.drop_column('users', 'directory_phone')
op.drop_column('users', 'directory_address')
op.drop_column('users', 'directory_bio')
op.drop_column('users', 'directory_email')
# Remove scholarship_reason
op.drop_column('users', 'scholarship_reason')