133 lines
7.8 KiB
Python
133 lines
7.8 KiB
Python
"""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
|
|
|
|
# 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! ###
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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 ###
|