"""sync_models Revision ID: 49c19df2c1d4 Revises: 29c02cb50737 Create Date: 2026-02-19 11:21:56.538569 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. revision: str = '49c19df2c1d4' down_revision: Union[str, None] = '29c02cb50737' 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('drive_acls', sa.Column('id', sa.Integer(), nullable=False), sa.Column('resource_type', sa.String(length=20), nullable=False), sa.Column('resource_id', sa.Integer(), nullable=False), sa.Column('subject_id', sa.Integer(), nullable=False), sa.Column('role', sa.String(length=50), nullable=True), sa.Column('actor_id', sa.Integer(), nullable=True), sa.Column('created_at', sa.TIMESTAMP(), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('chatbot_documents', sa.Column('id', sa.Integer(), nullable=False), sa.Column('document_id', sa.UUID(), nullable=False), sa.Column('user_id', sa.Integer(), nullable=False), sa.Column('drive_file_id', sa.Integer(), nullable=True), sa.Column('filename', sa.String(), nullable=False), sa.Column('file_path', sa.String(), nullable=True), sa.Column('cloud_url', sa.String(), nullable=True), sa.Column('chunks_count', sa.Integer(), nullable=True), sa.Column('created_at', sa.TIMESTAMP(), nullable=True), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_chatbot_documents_document_id'), 'chatbot_documents', ['document_id'], unique=True) op.create_index(op.f('ix_chatbot_documents_drive_file_id'), 'chatbot_documents', ['drive_file_id'], unique=False) op.create_index(op.f('ix_chatbot_documents_id'), 'chatbot_documents', ['id'], unique=False) op.create_index(op.f('ix_chatbot_documents_user_id'), 'chatbot_documents', ['user_id'], unique=False) op.create_table('vector_chunks', sa.Column('id', sa.Integer(), nullable=False), sa.Column('user_id', sa.Integer(), nullable=False), sa.Column('document_id', sa.String(), nullable=True), sa.Column('chunk_text', sa.String(), nullable=False), sa.Column('chunk_index', sa.Integer(), nullable=True), sa.Column('created_at', sa.TIMESTAMP(), nullable=True), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_vector_chunks_document_id'), 'vector_chunks', ['document_id'], unique=False) op.create_index(op.f('ix_vector_chunks_id'), 'vector_chunks', ['id'], unique=False) op.create_index(op.f('ix_vector_chunks_user_id'), 'vector_chunks', ['user_id'], unique=False) op.create_table('vector_indices', sa.Column('id', sa.Integer(), nullable=False), sa.Column('user_id', sa.Integer(), nullable=False), sa.Column('index_data', sa.LargeBinary(), nullable=True), sa.Column('dimension', sa.Integer(), nullable=True), sa.Column('total_vectors', sa.Integer(), nullable=True), sa.Column('updated_at', sa.TIMESTAMP(), nullable=True), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_vector_indices_id'), 'vector_indices', ['id'], unique=False) op.create_index(op.f('ix_vector_indices_user_id'), 'vector_indices', ['user_id'], unique=True) op.drop_table('drive_acl') op.alter_column('drive_activities', 'resource_type', existing_type=sa.VARCHAR(length=10), type_=sa.String(length=20), nullable=True) op.alter_column('drive_activities', 'resource_id', existing_type=sa.INTEGER(), nullable=True) op.alter_column('drive_activities', 'actor_id', existing_type=sa.INTEGER(), nullable=True) op.alter_column('drive_activities', 'activity_type', existing_type=sa.VARCHAR(length=50), nullable=True) op.alter_column('drive_activities', 'created_at', existing_type=postgresql.TIMESTAMP(timezone=True), type_=sa.TIMESTAMP(), nullable=True, existing_server_default=sa.text('now()')) op.drop_constraint(op.f('drive_activities_actor_id_fkey'), 'drive_activities', type_='foreignkey') op.create_foreign_key(None, 'drive_activities', 'users', ['actor_id'], ['id']) op.drop_column('drive_activities', 'device_info') op.drop_column('drive_activities', 'ip_address') op.add_column('drive_comments', sa.Column('user_id', sa.Integer(), nullable=False)) op.add_column('drive_comments', sa.Column('content', sa.Text(), nullable=False)) op.alter_column('drive_comments', 'created_at', existing_type=postgresql.TIMESTAMP(timezone=True), type_=sa.TIMESTAMP(), nullable=True, existing_server_default=sa.text('now()')) op.drop_constraint(op.f('drive_comments_file_id_fkey'), 'drive_comments', type_='foreignkey') op.drop_constraint(op.f('drive_comments_author_id_fkey'), 'drive_comments', type_='foreignkey') op.create_foreign_key(None, 'drive_comments', 'users', ['user_id'], ['id']) op.create_foreign_key(None, 'drive_comments', 'drive_files', ['file_id'], ['id']) op.drop_column('drive_comments', 'anchor') op.drop_column('drive_comments', 'body') op.drop_column('drive_comments', 'resolved_at') op.drop_column('drive_comments', 'author_id') op.add_column('drive_file_versions', sa.Column('s3_key', sa.String(), nullable=True)) op.add_column('drive_file_versions', sa.Column('content_type', sa.String(), nullable=True)) op.add_column('drive_file_versions', sa.Column('uploader_id', sa.Integer(), nullable=True)) op.alter_column('drive_file_versions', 'file_id', existing_type=sa.INTEGER(), nullable=True) op.alter_column('drive_file_versions', 'version_number', existing_type=sa.INTEGER(), nullable=True) op.alter_column('drive_file_versions', 'size', existing_type=sa.BIGINT(), nullable=True) op.alter_column('drive_file_versions', 'created_at', existing_type=postgresql.TIMESTAMP(timezone=True), type_=sa.TIMESTAMP(), nullable=True, existing_server_default=sa.text('now()')) op.drop_constraint(op.f('drive_file_versions_file_id_fkey'), 'drive_file_versions', type_='foreignkey') op.drop_constraint(op.f('drive_file_versions_created_by_id_fkey'), 'drive_file_versions', type_='foreignkey') op.create_foreign_key(None, 'drive_file_versions', 'drive_files', ['file_id'], ['id']) op.create_foreign_key(None, 'drive_file_versions', 'users', ['uploader_id'], ['id']) op.drop_column('drive_file_versions', 'checksum') op.drop_column('drive_file_versions', 'created_by_id') op.drop_column('drive_file_versions', 'storage_key') op.drop_column('drive_file_versions', 'mime_type') op.alter_column('drive_stars', 'user_id', existing_type=sa.INTEGER(), nullable=True) op.alter_column('drive_stars', 'resource_type', existing_type=sa.VARCHAR(length=10), nullable=True) op.alter_column('drive_stars', 'resource_id', existing_type=sa.INTEGER(), nullable=True) op.drop_constraint(op.f('uq_drive_star'), 'drive_stars', type_='unique') op.drop_constraint(op.f('drive_stars_user_id_fkey'), 'drive_stars', type_='foreignkey') op.create_foreign_key(None, 'drive_stars', 'users', ['user_id'], ['id']) op.drop_column('drive_stars', 'created_at') op.alter_column('project_activities', 'ip_address', existing_type=sa.VARCHAR(length=64), type_=sa.String(length=45), existing_nullable=True) op.alter_column('project_comments', 'anchor', existing_type=postgresql.JSONB(astext_type=sa.Text()), type_=sa.Text(), existing_nullable=True) op.alter_column('project_shares', 'permission', existing_type=sa.VARCHAR(length=50), type_=sa.String(length=20), existing_nullable=False) op.drop_constraint(op.f('unique_project_user_share'), 'project_shares', type_='unique') op.drop_constraint(op.f('project_shares_shared_by_user_id_fkey'), 'project_shares', type_='foreignkey') op.drop_column('project_shares', 'updated_at') op.drop_column('project_shares', 'shared_by_user_id') op.add_column('project_versions', sa.Column('version_label', sa.String(length=50), nullable=False)) op.add_column('project_versions', sa.Column('description', sa.Text(), nullable=True)) op.alter_column('project_versions', 'created_by_id', existing_type=sa.INTEGER(), nullable=True) op.drop_constraint(op.f('project_versions_created_by_id_fkey'), 'project_versions', type_='foreignkey') op.create_foreign_key(None, 'project_versions', 'users', ['created_by_id'], ['id'], ondelete='SET NULL') op.drop_column('project_versions', 'changes_description') op.drop_column('project_versions', 'session_id') op.add_column('user_files', sa.Column('filename', sa.String(), nullable=False)) op.add_column('user_files', sa.Column('size', sa.BigInteger(), nullable=True)) op.add_column('user_files', sa.Column('content_type', sa.String(), nullable=True)) op.add_column('user_files', sa.Column('status', sa.String(), nullable=True)) op.alter_column('user_files', 'created_at', existing_type=postgresql.TIMESTAMP(timezone=True), type_=sa.TIMESTAMP(), nullable=True, existing_server_default=sa.text('now()')) op.drop_constraint(op.f('user_files_s3_key_key'), 'user_files', type_='unique') op.create_index(op.f('ix_user_files_id'), 'user_files', ['id'], unique=False) op.create_index(op.f('ix_user_files_user_id'), 'user_files', ['user_id'], unique=False) op.drop_constraint(op.f('user_files_user_id_fkey'), 'user_files', type_='foreignkey') op.create_foreign_key(None, 'user_files', 'users', ['user_id'], ['id']) op.drop_column('user_files', 'file_name') op.drop_column('user_files', 'deleted_at') op.drop_column('user_files', 'file_size') op.drop_column('user_files', 'is_deleted') op.drop_column('user_files', 'mime_type') op.add_column('user_storage_usage', sa.Column('id', sa.Integer(), nullable=False)) op.add_column('user_storage_usage', sa.Column('total_bytes_used', sa.BigInteger(), nullable=True)) op.add_column('user_storage_usage', sa.Column('total_files_count', sa.Integer(), nullable=True)) op.alter_column('user_storage_usage', 'last_updated', existing_type=postgresql.TIMESTAMP(timezone=True), type_=sa.TIMESTAMP(), nullable=True, existing_server_default=sa.text('now()')) op.create_index(op.f('ix_user_storage_usage_id'), 'user_storage_usage', ['id'], unique=False) op.create_unique_constraint(None, 'user_storage_usage', ['user_id']) op.drop_constraint(op.f('user_storage_usage_user_id_fkey'), 'user_storage_usage', type_='foreignkey') op.create_foreign_key(None, 'user_storage_usage', 'users', ['user_id'], ['id']) op.drop_column('user_storage_usage', 'total_bytes') op.drop_column('user_storage_usage', 'file_count') # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.add_column('user_storage_usage', sa.Column('file_count', sa.INTEGER(), autoincrement=False, nullable=False)) op.add_column('user_storage_usage', sa.Column('total_bytes', sa.BIGINT(), autoincrement=False, nullable=False)) op.drop_constraint(None, 'user_storage_usage', type_='foreignkey') op.create_foreign_key(op.f('user_storage_usage_user_id_fkey'), 'user_storage_usage', 'users', ['user_id'], ['id'], ondelete='CASCADE') op.drop_constraint(None, 'user_storage_usage', type_='unique') op.drop_index(op.f('ix_user_storage_usage_id'), table_name='user_storage_usage') op.alter_column('user_storage_usage', 'last_updated', existing_type=sa.TIMESTAMP(), type_=postgresql.TIMESTAMP(timezone=True), nullable=False, existing_server_default=sa.text('now()')) op.drop_column('user_storage_usage', 'total_files_count') op.drop_column('user_storage_usage', 'total_bytes_used') op.drop_column('user_storage_usage', 'id') op.add_column('user_files', sa.Column('mime_type', sa.VARCHAR(length=255), autoincrement=False, nullable=True)) op.add_column('user_files', sa.Column('is_deleted', sa.BOOLEAN(), autoincrement=False, nullable=False)) op.add_column('user_files', sa.Column('file_size', sa.BIGINT(), autoincrement=False, nullable=False)) op.add_column('user_files', sa.Column('deleted_at', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=True)) op.add_column('user_files', sa.Column('file_name', sa.VARCHAR(length=512), autoincrement=False, nullable=False)) op.drop_constraint(None, 'user_files', type_='foreignkey') op.create_foreign_key(op.f('user_files_user_id_fkey'), 'user_files', 'users', ['user_id'], ['id'], ondelete='CASCADE') op.drop_index(op.f('ix_user_files_user_id'), table_name='user_files') op.drop_index(op.f('ix_user_files_id'), table_name='user_files') op.create_unique_constraint(op.f('user_files_s3_key_key'), 'user_files', ['s3_key']) op.alter_column('user_files', 'created_at', existing_type=sa.TIMESTAMP(), type_=postgresql.TIMESTAMP(timezone=True), nullable=False, existing_server_default=sa.text('now()')) op.drop_column('user_files', 'status') op.drop_column('user_files', 'content_type') op.drop_column('user_files', 'size') op.drop_column('user_files', 'filename') op.add_column('project_versions', sa.Column('session_id', sa.VARCHAR(length=255), autoincrement=False, nullable=True)) op.add_column('project_versions', sa.Column('changes_description', sa.VARCHAR(length=500), autoincrement=False, nullable=True)) op.drop_constraint(None, 'project_versions', type_='foreignkey') op.create_foreign_key(op.f('project_versions_created_by_id_fkey'), 'project_versions', 'users', ['created_by_id'], ['id']) op.alter_column('project_versions', 'created_by_id', existing_type=sa.INTEGER(), nullable=False) op.drop_column('project_versions', 'description') op.drop_column('project_versions', 'version_label') op.add_column('project_shares', sa.Column('shared_by_user_id', sa.INTEGER(), autoincrement=False, nullable=False)) op.add_column('project_shares', sa.Column('updated_at', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=False)) op.create_foreign_key(op.f('project_shares_shared_by_user_id_fkey'), 'project_shares', 'users', ['shared_by_user_id'], ['id'], ondelete='CASCADE') op.create_unique_constraint(op.f('unique_project_user_share'), 'project_shares', ['project_id', 'shared_with_user_id']) op.alter_column('project_shares', 'permission', existing_type=sa.String(length=20), type_=sa.VARCHAR(length=50), existing_nullable=False) op.alter_column('project_comments', 'anchor', existing_type=sa.Text(), type_=postgresql.JSONB(astext_type=sa.Text()), existing_nullable=True) op.alter_column('project_activities', 'ip_address', existing_type=sa.String(length=45), type_=sa.VARCHAR(length=64), existing_nullable=True) op.add_column('drive_stars', sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=False)) op.drop_constraint(None, 'drive_stars', type_='foreignkey') op.create_foreign_key(op.f('drive_stars_user_id_fkey'), 'drive_stars', 'users', ['user_id'], ['id'], ondelete='CASCADE') op.create_unique_constraint(op.f('uq_drive_star'), 'drive_stars', ['resource_type', 'resource_id', 'user_id']) op.alter_column('drive_stars', 'resource_id', existing_type=sa.INTEGER(), nullable=False) op.alter_column('drive_stars', 'resource_type', existing_type=sa.VARCHAR(length=10), nullable=False) op.alter_column('drive_stars', 'user_id', existing_type=sa.INTEGER(), nullable=False) op.add_column('drive_file_versions', sa.Column('mime_type', sa.VARCHAR(length=255), autoincrement=False, nullable=True)) op.add_column('drive_file_versions', sa.Column('storage_key', sa.TEXT(), autoincrement=False, nullable=False)) op.add_column('drive_file_versions', sa.Column('created_by_id', sa.INTEGER(), autoincrement=False, nullable=False)) op.add_column('drive_file_versions', sa.Column('checksum', sa.VARCHAR(length=128), autoincrement=False, nullable=True)) op.drop_constraint(None, 'drive_file_versions', type_='foreignkey') op.drop_constraint(None, 'drive_file_versions', type_='foreignkey') op.create_foreign_key(op.f('drive_file_versions_created_by_id_fkey'), 'drive_file_versions', 'users', ['created_by_id'], ['id']) op.create_foreign_key(op.f('drive_file_versions_file_id_fkey'), 'drive_file_versions', 'drive_files', ['file_id'], ['id'], ondelete='CASCADE') op.alter_column('drive_file_versions', 'created_at', existing_type=sa.TIMESTAMP(), type_=postgresql.TIMESTAMP(timezone=True), nullable=False, existing_server_default=sa.text('now()')) op.alter_column('drive_file_versions', 'size', existing_type=sa.BIGINT(), nullable=False) op.alter_column('drive_file_versions', 'version_number', existing_type=sa.INTEGER(), nullable=False) op.alter_column('drive_file_versions', 'file_id', existing_type=sa.INTEGER(), nullable=False) op.drop_column('drive_file_versions', 'uploader_id') op.drop_column('drive_file_versions', 'content_type') op.drop_column('drive_file_versions', 's3_key') op.add_column('drive_comments', sa.Column('author_id', sa.INTEGER(), autoincrement=False, nullable=False)) op.add_column('drive_comments', sa.Column('resolved_at', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=True)) op.add_column('drive_comments', sa.Column('body', sa.TEXT(), autoincrement=False, nullable=False)) op.add_column('drive_comments', sa.Column('anchor', postgresql.JSONB(astext_type=sa.Text()), autoincrement=False, nullable=True)) op.drop_constraint(None, 'drive_comments', type_='foreignkey') op.drop_constraint(None, 'drive_comments', type_='foreignkey') op.create_foreign_key(op.f('drive_comments_author_id_fkey'), 'drive_comments', 'users', ['author_id'], ['id'], ondelete='CASCADE') op.create_foreign_key(op.f('drive_comments_file_id_fkey'), 'drive_comments', 'drive_files', ['file_id'], ['id'], ondelete='CASCADE') op.alter_column('drive_comments', 'created_at', existing_type=sa.TIMESTAMP(), type_=postgresql.TIMESTAMP(timezone=True), nullable=False, existing_server_default=sa.text('now()')) op.drop_column('drive_comments', 'content') op.drop_column('drive_comments', 'user_id') op.add_column('drive_activities', sa.Column('ip_address', sa.VARCHAR(length=64), autoincrement=False, nullable=True)) op.add_column('drive_activities', sa.Column('device_info', sa.TEXT(), autoincrement=False, nullable=True)) op.drop_constraint(None, 'drive_activities', type_='foreignkey') op.create_foreign_key(op.f('drive_activities_actor_id_fkey'), 'drive_activities', 'users', ['actor_id'], ['id'], ondelete='CASCADE') op.alter_column('drive_activities', 'created_at', existing_type=sa.TIMESTAMP(), type_=postgresql.TIMESTAMP(timezone=True), nullable=False, existing_server_default=sa.text('now()')) op.alter_column('drive_activities', 'activity_type', existing_type=sa.VARCHAR(length=50), nullable=False) op.alter_column('drive_activities', 'actor_id', existing_type=sa.INTEGER(), nullable=False) op.alter_column('drive_activities', 'resource_id', existing_type=sa.INTEGER(), nullable=False) op.alter_column('drive_activities', 'resource_type', existing_type=sa.String(length=20), type_=sa.VARCHAR(length=10), nullable=False) op.create_table('drive_acl', sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), sa.Column('resource_type', sa.VARCHAR(length=10), autoincrement=False, nullable=False), sa.Column('resource_id', sa.INTEGER(), autoincrement=False, nullable=False), sa.Column('subject_type', sa.VARCHAR(length=10), autoincrement=False, nullable=False), sa.Column('subject_id', sa.INTEGER(), autoincrement=False, nullable=True), sa.Column('role', sa.VARCHAR(length=20), autoincrement=False, nullable=False), sa.Column('inherited_from', sa.INTEGER(), autoincrement=False, nullable=True), sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=False), sa.PrimaryKeyConstraint('id', name=op.f('drive_acl_pkey')) ) op.drop_index(op.f('ix_vector_indices_user_id'), table_name='vector_indices') op.drop_index(op.f('ix_vector_indices_id'), table_name='vector_indices') op.drop_table('vector_indices') op.drop_index(op.f('ix_vector_chunks_user_id'), table_name='vector_chunks') op.drop_index(op.f('ix_vector_chunks_id'), table_name='vector_chunks') op.drop_index(op.f('ix_vector_chunks_document_id'), table_name='vector_chunks') op.drop_table('vector_chunks') op.drop_index(op.f('ix_chatbot_documents_user_id'), table_name='chatbot_documents') op.drop_index(op.f('ix_chatbot_documents_id'), table_name='chatbot_documents') op.drop_index(op.f('ix_chatbot_documents_drive_file_id'), table_name='chatbot_documents') op.drop_index(op.f('ix_chatbot_documents_document_id'), table_name='chatbot_documents') op.drop_table('chatbot_documents') op.drop_table('drive_acls') # ### end Alembic commands ###