"""create initial tables
Revision ID: 001
Revises:
Create Date: 2023-06-21 10:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '001'
down_revision = None
branch_labels = None
depends_on = None
def upgrade() -> None:
# Create user_sessions table
op.create_table(
'user_sessions',
sa.Column('id', sa.String(), nullable=False),
sa.Column('user_identifier', sa.String(), nullable=True),
sa.Column('context', sa.Text(), nullable=True),
sa.Column('is_active', sa.Boolean(), nullable=False, server_default=sa.text('true')),
sa.Column('created_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.Column('updated_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_user_sessions_user_identifier'), 'user_sessions', ['user_identifier'], unique=False)
# Create conversations table
op.create_table(
'conversations',
sa.Column('id', sa.String(), nullable=False),
sa.Column('user_session_id', sa.String(), nullable=False),
sa.Column('topic', sa.String(), nullable=True),
sa.Column('is_active', sa.Boolean(), nullable=False, server_default=sa.text('true')),
sa.Column('created_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.Column('updated_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.ForeignKeyConstraint(['user_session_id'], ['user_sessions.id'], ),
sa.PrimaryKeyConstraint('id')
)
# Create messages table
op.create_table(
'messages',
sa.Column('id', sa.String(), nullable=False),
sa.Column('conversation_id', sa.String(), nullable=False),
sa.Column('message_type', sa.String(), nullable=False),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('message_metadata', sa.Text(), nullable=True),
sa.Column('sequence_number', sa.Integer(), nullable=False),
sa.Column('created_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.Column('updated_at', sa.TIMESTAMP(), nullable=False, server_default=sa.func.now()),
sa.ForeignKeyConstraint(['conversation_id'], ['conversations.id'], ),
sa.PrimaryKeyConstraint('id')
)
def downgrade() -> None:
op.drop_table('messages')
op.drop_table('conversations')
op.drop_index(op.f('ix_user_sessions_user_identifier'), table_name='user_sessions')
op.drop_table('user_sessions')