From 55435fd29ec29d378f66425a232268c0231bc4a7 Mon Sep 17 00:00:00 2001 From: "ahmed.mujtaba" Date: Wed, 12 Aug 2026 18:28:28 +0500 Subject: [PATCH] Restore intermediate Alembic revisions required by the local migration chain. EOF Co-authored-by: Cursor --- .../20260807_1449-2515ed7e2966_auto.py | 53 +++++++++ .../20260807_1455-8c67df87f19c_auto.py | 40 +++++++ ...d69b60_add_experience_to_inbox_messages.py | 32 +++++ .../20260811_1007-ed78f1706042_auto.py | 34 ++++++ .../20260811_1149-d0b62342a32f_auto.py | 90 ++++++++++++++ .../20260811_1311-681a78158447_auto.py | 110 ++++++++++++++++++ .../20260811_1352-67c4c7974afa_auto.py | 36 ++++++ .../20260812_0746-4b34909ae551_auto.py | 52 +++++++++ .../20260812_0817-1a7c0e30aaab_auto.py | 32 +++++ .../20260812_0845-6ec5e105dce3_auto.py | 34 ++++++ 10 files changed, 513 insertions(+) create mode 100644 backend/migrations/versions/20260807_1449-2515ed7e2966_auto.py create mode 100644 backend/migrations/versions/20260807_1455-8c67df87f19c_auto.py create mode 100644 backend/migrations/versions/20260810_0956-fcd3f4d69b60_add_experience_to_inbox_messages.py create mode 100644 backend/migrations/versions/20260811_1007-ed78f1706042_auto.py create mode 100644 backend/migrations/versions/20260811_1149-d0b62342a32f_auto.py create mode 100644 backend/migrations/versions/20260811_1311-681a78158447_auto.py create mode 100644 backend/migrations/versions/20260811_1352-67c4c7974afa_auto.py create mode 100644 backend/migrations/versions/20260812_0746-4b34909ae551_auto.py create mode 100644 backend/migrations/versions/20260812_0817-1a7c0e30aaab_auto.py create mode 100644 backend/migrations/versions/20260812_0845-6ec5e105dce3_auto.py diff --git a/backend/migrations/versions/20260807_1449-2515ed7e2966_auto.py b/backend/migrations/versions/20260807_1449-2515ed7e2966_auto.py new file mode 100644 index 0000000..e6e7329 --- /dev/null +++ b/backend/migrations/versions/20260807_1449-2515ed7e2966_auto.py @@ -0,0 +1,53 @@ +"""auto + +Revision ID: 2515ed7e2966 +Revises: 72853b8d2126 +Create Date: 2026-08-07 14:49:26.409410+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = '2515ed7e2966' +down_revision: Union[str, None] = '72853b8d2126' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + +# Deliberately NOT schema-qualified: Inbox_Messages.application_status carries +# type.schema = None, so the ORM emits the type name unqualified and resolves it +# through search_path. Creating it as app. would not match. +application_status = sa.Enum( + 'PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED', + name='candidate_application_status', +) + + +def upgrade() -> None: + # op.add_column does NOT emit CREATE TYPE, so the ALTER below would fail with + # `type "candidate_application_status" does not exist`. + application_status.create(op.get_bind(), checkfirst=True) + # server_default is required, not cosmetic: the column is NOT NULL and every + # existing row would be null without it, which Postgres rejects outright. + op.add_column( + 'inbox_messages', + sa.Column( + 'application_status', + application_status, + nullable=False, + server_default='CLOSED', + ), + schema='app', + ) + + +def downgrade() -> None: + op.drop_column('inbox_messages', 'application_status', schema='app') + # drop_column leaves the TYPE behind; without this, re-running upgrade fails + # with `type "candidate_application_status" already exists`. + application_status.drop(op.get_bind(), checkfirst=True) diff --git a/backend/migrations/versions/20260807_1455-8c67df87f19c_auto.py b/backend/migrations/versions/20260807_1455-8c67df87f19c_auto.py new file mode 100644 index 0000000..a686551 --- /dev/null +++ b/backend/migrations/versions/20260807_1455-8c67df87f19c_auto.py @@ -0,0 +1,40 @@ +"""auto + +Revision ID: 8c67df87f19c +Revises: 2515ed7e2966 +Create Date: 2026-08-07 14:55:42.858317+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import +from sqlalchemy.dialects import postgresql + +revision: str = '8c67df87f19c' +down_revision: Union[str, None] = '2515ed7e2966' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('inbox_messages', 'application_status', + existing_type=postgresql.ENUM('PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED', name='candidate_application_status'), + server_default=None, + existing_nullable=False, + schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('inbox_messages', 'application_status', + existing_type=postgresql.ENUM('PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED', name='candidate_application_status'), + server_default=sa.text("'CLOSED'::candidate_application_status"), + existing_nullable=False, + schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260810_0956-fcd3f4d69b60_add_experience_to_inbox_messages.py b/backend/migrations/versions/20260810_0956-fcd3f4d69b60_add_experience_to_inbox_messages.py new file mode 100644 index 0000000..181a444 --- /dev/null +++ b/backend/migrations/versions/20260810_0956-fcd3f4d69b60_add_experience_to_inbox_messages.py @@ -0,0 +1,32 @@ +"""add experience to inbox_messages + +Revision ID: fcd3f4d69b60 +Revises: 8c67df87f19c +Create Date: 2026-08-10 09:56:55.290497+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = 'fcd3f4d69b60' +down_revision: Union[str, None] = '8c67df87f19c' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('inbox_messages', sa.Column('experience', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('inbox_messages', 'experience', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260811_1007-ed78f1706042_auto.py b/backend/migrations/versions/20260811_1007-ed78f1706042_auto.py new file mode 100644 index 0000000..60b0a09 --- /dev/null +++ b/backend/migrations/versions/20260811_1007-ed78f1706042_auto.py @@ -0,0 +1,34 @@ +"""auto + +Revision ID: ed78f1706042 +Revises: fcd3f4d69b60 +Create Date: 2026-08-11 10:07:53.324376+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = 'ed78f1706042' +down_revision: Union[str, None] = 'fcd3f4d69b60' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('inbox_messages', sa.Column('candidate_phone_number', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app') + op.add_column('inbox_messages', sa.Column('current_employment', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('inbox_messages', 'current_employment', schema='app') + op.drop_column('inbox_messages', 'candidate_phone_number', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260811_1149-d0b62342a32f_auto.py b/backend/migrations/versions/20260811_1149-d0b62342a32f_auto.py new file mode 100644 index 0000000..be6c423 --- /dev/null +++ b/backend/migrations/versions/20260811_1149-d0b62342a32f_auto.py @@ -0,0 +1,90 @@ +"""auto + +Revision ID: d0b62342a32f +Revises: ed78f1706042 +Create Date: 2026-08-11 11:49:25.965217+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = 'd0b62342a32f' +down_revision: Union[str, None] = 'ed78f1706042' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('notes', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('note', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('updated_at', sa.DateTime(), nullable=False), + sa.Column('user_id', sa.Uuid(), nullable=True), + sa.Column('created_by', sa.Uuid(), nullable=True), + sa.ForeignKeyConstraint(['created_by'], ['app.users.id'], name=op.f('fk_notes_created_by_users')), + sa.ForeignKeyConstraint(['user_id'], ['app.users.id'], name=op.f('fk_notes_user_id_users')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_notes')), + schema='app' + ) + op.create_table('activity', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('activity_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('activity_date', sa.DateTime(), nullable=False), + sa.Column('activity_time', sa.DateTime(), nullable=False), + sa.Column('activity_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('description', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('inbox_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_activity_inbox_id_inbox')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_activity')), + schema='app' + ) + op.create_table('feedback', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('review', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('financial_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('score', sa.Float(), nullable=False), + sa.Column('note', sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('updated_at', sa.DateTime(), nullable=False), + sa.Column('reviewed_by', sa.Uuid(), nullable=True), + sa.Column('inbox_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_feedback_inbox_id_inbox')), + sa.ForeignKeyConstraint(['reviewed_by'], ['app.users.id'], name=op.f('fk_feedback_reviewed_by_users')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_feedback')), + schema='app' + ) + op.create_table('interviews', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('interview_date', sa.DateTime(), nullable=False), + sa.Column('interview_time', sa.DateTime(), nullable=False), + sa.Column('interview_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('interview_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('inbox_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_interviews_inbox_id_inbox')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_interviews')), + schema='app' + ) + op.add_column('inbox', sa.Column('favorite', sa.Boolean(), nullable=True), schema='app') + op.add_column('inbox', sa.Column('rating', sa.Float(), nullable=True), schema='app') + op.add_column('inbox_messages', sa.Column('candidate_education', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('inbox_messages', 'candidate_education', schema='app') + op.drop_column('inbox', 'rating', schema='app') + op.drop_column('inbox', 'favorite', schema='app') + op.drop_table('interviews', schema='app') + op.drop_table('feedback', schema='app') + op.drop_table('activity', schema='app') + op.drop_table('notes', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260811_1311-681a78158447_auto.py b/backend/migrations/versions/20260811_1311-681a78158447_auto.py new file mode 100644 index 0000000..a9627c0 --- /dev/null +++ b/backend/migrations/versions/20260811_1311-681a78158447_auto.py @@ -0,0 +1,110 @@ +"""auto + +Revision ID: 681a78158447 +Revises: d0b62342a32f +Create Date: 2026-08-11 13:11:58.032282+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import +from sqlalchemy.dialects import postgresql + +revision: str = '681a78158447' +down_revision: Union[str, None] = 'd0b62342a32f' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('activity', 'activity_date', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('activity', 'activity_time', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('feedback', 'created_at', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('feedback', 'updated_at', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('interviews', 'interview_date', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('interviews', 'interview_time', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('notes', 'created_at', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + op.alter_column('notes', 'updated_at', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False, + schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('notes', 'updated_at', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('notes', 'created_at', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('interviews', 'interview_time', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('interviews', 'interview_date', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('feedback', 'updated_at', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('feedback', 'created_at', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('activity', 'activity_time', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + op.alter_column('activity', 'activity_date', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False, + schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260811_1352-67c4c7974afa_auto.py b/backend/migrations/versions/20260811_1352-67c4c7974afa_auto.py new file mode 100644 index 0000000..b01e160 --- /dev/null +++ b/backend/migrations/versions/20260811_1352-67c4c7974afa_auto.py @@ -0,0 +1,36 @@ +"""auto + +Revision ID: 67c4c7974afa +Revises: 681a78158447 +Create Date: 2026-08-11 13:52:11.674108+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = '67c4c7974afa' +down_revision: Union[str, None] = '681a78158447' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('inbox_messages', sa.Column('assigned_job_post_id', sa.Uuid(), nullable=True), schema='app') + op.create_index(op.f('ix_inbox_messages_assigned_job_post_id'), 'inbox_messages', ['assigned_job_post_id'], unique=False, schema='app') + op.create_foreign_key(op.f('fk_inbox_messages_assigned_job_post_id_job_posts'), 'inbox_messages', 'job_posts', ['assigned_job_post_id'], ['id'], source_schema='app', referent_schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(op.f('fk_inbox_messages_assigned_job_post_id_job_posts'), 'inbox_messages', schema='app', type_='foreignkey') + op.drop_index(op.f('ix_inbox_messages_assigned_job_post_id'), table_name='inbox_messages', schema='app') + op.drop_column('inbox_messages', 'assigned_job_post_id', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260812_0746-4b34909ae551_auto.py b/backend/migrations/versions/20260812_0746-4b34909ae551_auto.py new file mode 100644 index 0000000..07758e6 --- /dev/null +++ b/backend/migrations/versions/20260812_0746-4b34909ae551_auto.py @@ -0,0 +1,52 @@ +"""auto + +Revision ID: 4b34909ae551 +Revises: 67c4c7974afa +Create Date: 2026-08-12 07:46:38.028948+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = '4b34909ae551' +down_revision: Union[str, None] = '67c4c7974afa' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('manual_upload_candidate', + sa.Column('id', sa.Uuid(), nullable=False), + sa.Column('candidate_email', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('candidate_name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('candidate_phone', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('job_post_id', sa.Uuid(), nullable=True), + sa.Column('full_text', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('current_company', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('user_id', sa.Uuid(), nullable=True), + sa.Column('platform', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('created_by', sa.Uuid(), nullable=True), + sa.Column('experience', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('status', sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), + sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False), + sa.ForeignKeyConstraint(['created_by'], ['app.users.id'], name=op.f('fk_manual_upload_candidate_created_by_users')), + sa.ForeignKeyConstraint(['job_post_id'], ['app.job_posts.id'], name=op.f('fk_manual_upload_candidate_job_post_id_job_posts')), + sa.ForeignKeyConstraint(['user_id'], ['app.users.id'], name=op.f('fk_manual_upload_candidate_user_id_users')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_manual_upload_candidate')), + schema='app' + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('manual_upload_candidate', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260812_0817-1a7c0e30aaab_auto.py b/backend/migrations/versions/20260812_0817-1a7c0e30aaab_auto.py new file mode 100644 index 0000000..f6648ca --- /dev/null +++ b/backend/migrations/versions/20260812_0817-1a7c0e30aaab_auto.py @@ -0,0 +1,32 @@ +"""auto + +Revision ID: 1a7c0e30aaab +Revises: 4b34909ae551 +Create Date: 2026-08-12 08:17:21.212665+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = '1a7c0e30aaab' +down_revision: Union[str, None] = '4b34909ae551' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('manual_upload_candidate', sa.Column('referral_by', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('manual_upload_candidate', 'referral_by', schema='app') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/20260812_0845-6ec5e105dce3_auto.py b/backend/migrations/versions/20260812_0845-6ec5e105dce3_auto.py new file mode 100644 index 0000000..9bb115b --- /dev/null +++ b/backend/migrations/versions/20260812_0845-6ec5e105dce3_auto.py @@ -0,0 +1,34 @@ +"""auto + +Revision ID: 6ec5e105dce3 +Revises: 1a7c0e30aaab +Create Date: 2026-08-12 08:45:01.957310+00:00 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel # SQLModel renders AutoString() into migrations but adds no import + + +revision: str = '6ec5e105dce3' +down_revision: Union[str, None] = '1a7c0e30aaab' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('manual_upload_candidate', sa.Column('file_name', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app') + op.add_column('manual_upload_candidate', sa.Column('file_path', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('manual_upload_candidate', 'file_path', schema='app') + op.drop_column('manual_upload_candidate', 'file_name', schema='app') + # ### end Alembic commands ###