"""add_support_tables Revision ID: 5553f8745c6e Revises: 20250117_000007 Create Date: 2025-09-20 14:02:19.543853 """ from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import mysql from sqlalchemy import inspect # revision identifiers, used by Alembic. revision = '5553f8745c6e' down_revision = '20250117_000007' branch_labels = None depends_on = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### bind = op.get_bind() inspector = inspect(bind) tables = set(inspector.get_table_names()) # Only create tables if they don't exist if 'support_categories' not in tables: op.create_table('support_categories', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('name', sa.String(length=100), nullable=False), sa.Column('description', sa.Text(), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=False), sa.Column('updated_at', sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_support_categories_name'), 'support_categories', ['name'], unique=False) if 'support_priorities' not in tables: op.create_table('support_priorities', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('name', sa.String(length=50), nullable=False), sa.Column('description', sa.Text(), nullable=True), sa.Column('color', sa.String(length=7), nullable=True), sa.Column('order', sa.Integer(), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=False), sa.Column('updated_at', sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_support_priorities_name'), 'support_priorities', ['name'], unique=False) if 'support_statuses' not in tables: op.create_table('support_statuses', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('name', sa.String(length=50), nullable=False), sa.Column('description', sa.Text(), nullable=True), sa.Column('color', sa.String(length=7), nullable=True), sa.Column('is_final', sa.Boolean(), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=False), sa.Column('updated_at', sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_support_statuses_name'), 'support_statuses', ['name'], unique=False) if 'support_tickets' not in tables: op.create_table('support_tickets', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('title', sa.String(length=255), nullable=False), sa.Column('description', sa.Text(), nullable=False), sa.Column('user_id', sa.Integer(), nullable=False), sa.Column('category_id', sa.Integer(), nullable=False), sa.Column('priority_id', sa.Integer(), nullable=False), sa.Column('status_id', sa.Integer(), nullable=False), sa.Column('assigned_operator_id', sa.Integer(), nullable=True), sa.Column('is_internal', sa.Boolean(), nullable=False), sa.Column('closed_at', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(), nullable=False), sa.Column('updated_at', sa.DateTime(), nullable=False), sa.ForeignKeyConstraint(['assigned_operator_id'], ['users.id'], ondelete='SET NULL'), sa.ForeignKeyConstraint(['category_id'], ['support_categories.id'], ondelete='RESTRICT'), sa.ForeignKeyConstraint(['priority_id'], ['support_priorities.id'], ondelete='RESTRICT'), sa.ForeignKeyConstraint(['status_id'], ['support_statuses.id'], ondelete='RESTRICT'), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_support_tickets_assigned_operator_id'), 'support_tickets', ['assigned_operator_id'], unique=False) op.create_index(op.f('ix_support_tickets_category_id'), 'support_tickets', ['category_id'], unique=False) op.create_index(op.f('ix_support_tickets_priority_id'), 'support_tickets', ['priority_id'], unique=False) op.create_index(op.f('ix_support_tickets_status_id'), 'support_tickets', ['status_id'], unique=False) op.create_index(op.f('ix_support_tickets_title'), 'support_tickets', ['title'], unique=False) op.create_index(op.f('ix_support_tickets_user_id'), 'support_tickets', ['user_id'], unique=False) if 'support_messages' not in tables: op.create_table('support_messages', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('ticket_id', sa.Integer(), nullable=False), sa.Column('sender_id', sa.Integer(), nullable=False), sa.Column('sender_type', sa.Enum('USER', 'OPERATOR', 'SYSTEM', name='sendertype'), nullable=False), sa.Column('content', sa.Text(), nullable=False), sa.Column('is_internal', sa.Boolean(), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=False), sa.ForeignKeyConstraint(['sender_id'], ['users.id'], ondelete='CASCADE'), sa.ForeignKeyConstraint(['ticket_id'], ['support_tickets.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_support_messages_sender_id'), 'support_messages', ['sender_id'], unique=False) op.create_index(op.f('ix_support_messages_sender_type'), 'support_messages', ['sender_type'], unique=False) op.create_index(op.f('ix_support_messages_ticket_id'), 'support_messages', ['ticket_id'], unique=False) # Only alter columns if businesses table exists if 'businesses' in tables: op.alter_column('businesses', 'business_type', existing_type=mysql.ENUM('شرکت', 'مغازه', 'فروشگاه', 'اتحادیه', 'باشگاه', 'موسسه', 'شخصی', collation='utf8mb4_general_ci'), type_=sa.Enum('COMPANY', 'SHOP', 'STORE', 'UNION', 'CLUB', 'INSTITUTE', 'INDIVIDUAL', name='businesstype'), existing_nullable=False) op.alter_column('businesses', 'business_field', existing_type=mysql.ENUM('تولیدی', 'بازرگانی', 'خدماتی', 'سایر', collation='utf8mb4_general_ci'), type_=sa.Enum('MANUFACTURING', 'TRADING', 'SERVICE', 'OTHER', name='businessfield'), existing_nullable=False) # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.alter_column('businesses', 'business_field', existing_type=sa.Enum('MANUFACTURING', 'TRADING', 'SERVICE', 'OTHER', name='businessfield'), type_=mysql.ENUM('تولیدی', 'بازرگانی', 'خدماتی', 'سایر', collation='utf8mb4_general_ci'), existing_nullable=False) op.alter_column('businesses', 'business_type', existing_type=sa.Enum('COMPANY', 'SHOP', 'STORE', 'UNION', 'CLUB', 'INSTITUTE', 'INDIVIDUAL', name='businesstype'), type_=mysql.ENUM('شرکت', 'مغازه', 'فروشگاه', 'اتحادیه', 'باشگاه', 'موسسه', 'شخصی', collation='utf8mb4_general_ci'), existing_nullable=False) op.drop_index(op.f('ix_support_messages_ticket_id'), table_name='support_messages') op.drop_index(op.f('ix_support_messages_sender_type'), table_name='support_messages') op.drop_index(op.f('ix_support_messages_sender_id'), table_name='support_messages') op.drop_table('support_messages') op.drop_index(op.f('ix_support_tickets_user_id'), table_name='support_tickets') op.drop_index(op.f('ix_support_tickets_title'), table_name='support_tickets') op.drop_index(op.f('ix_support_tickets_status_id'), table_name='support_tickets') op.drop_index(op.f('ix_support_tickets_priority_id'), table_name='support_tickets') op.drop_index(op.f('ix_support_tickets_category_id'), table_name='support_tickets') op.drop_index(op.f('ix_support_tickets_assigned_operator_id'), table_name='support_tickets') op.drop_table('support_tickets') op.drop_index(op.f('ix_support_statuses_name'), table_name='support_statuses') op.drop_table('support_statuses') op.drop_index(op.f('ix_support_priorities_name'), table_name='support_priorities') op.drop_table('support_priorities') op.drop_index(op.f('ix_support_categories_name'), table_name='support_categories') op.drop_table('support_categories') # ### end Alembic commands ###