From c8f4040244146515185b1d674d0546f401caa886 Mon Sep 17 00:00:00 2001 From: Koncept Kit <63216427+konceptkit@users.noreply.github.com> Date: Mon, 5 Jan 2026 02:30:54 +0700 Subject: [PATCH] Fix migration 002 - skip existing columns --- .../versions/002_add_missing_user_fields.py | 51 ++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/alembic/versions/002_add_missing_user_fields.py b/alembic/versions/002_add_missing_user_fields.py index 0e9b2bc..f04aeef 100644 --- a/alembic/versions/002_add_missing_user_fields.py +++ b/alembic/versions/002_add_missing_user_fields.py @@ -24,31 +24,48 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: - """Add missing user fields""" + """Add missing user fields (skip if already exists)""" + from sqlalchemy import inspect + + conn = op.get_bind() + inspector = inspect(conn) + existing_columns = {col['name'] for col in inspector.get_columns('users')} # Add scholarship_reason - op.add_column('users', sa.Column('scholarship_reason', sa.Text(), nullable=True)) + if 'scholarship_reason' not in existing_columns: + 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)) + if 'directory_email' not in existing_columns: + op.add_column('users', sa.Column('directory_email', sa.String(), nullable=True)) + if 'directory_bio' not in existing_columns: + op.add_column('users', sa.Column('directory_bio', sa.Text(), nullable=True)) + if 'directory_address' not in existing_columns: + op.add_column('users', sa.Column('directory_address', sa.String(), nullable=True)) + if 'directory_phone' not in existing_columns: + op.add_column('users', sa.Column('directory_phone', sa.String(), nullable=True)) + if 'directory_dob' not in existing_columns: + op.add_column('users', sa.Column('directory_dob', sa.DateTime(), nullable=True)) + if 'directory_partner_name' not in existing_columns: + 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') + # Rename profile_image_url to profile_photo_url (skip if already renamed) + if 'profile_image_url' in existing_columns and 'profile_photo_url' not in existing_columns: + 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)) + if 'social_media_facebook' not in existing_columns: + op.add_column('users', sa.Column('social_media_facebook', sa.String(), nullable=True)) + if 'social_media_instagram' not in existing_columns: + op.add_column('users', sa.Column('social_media_instagram', sa.String(), nullable=True)) + if 'social_media_twitter' not in existing_columns: + op.add_column('users', sa.Column('social_media_twitter', sa.String(), nullable=True)) + if 'social_media_linkedin' not in existing_columns: + 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 + # Add email_verification_expires if missing + if 'email_verification_expires' not in existing_columns: + op.add_column('users', sa.Column('email_verification_expires', sa.DateTime(), nullable=True)) def downgrade() -> None: