Restore intermediate Alembic revisions required by the local migration chain.

EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
Rcruiter_hub
ahmed.mujtaba 2026-08-12 18:28:28 +05:00
parent f6733b59c2
commit 55435fd29e
10 changed files with 513 additions and 0 deletions

View File

@ -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.<name> 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)

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###