2025-06-09 08:10:19 +00:00

113 lines
5.3 KiB
Python

"""Initial migration
Revision ID: 1_initial_migration
Revises:
Create Date: 2023-08-01 12:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '1_initial_migration'
down_revision = None
branch_labels = None
depends_on = None
def upgrade() -> None:
# Create users table
op.create_table(
'users',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('email', sa.String(), nullable=False),
sa.Column('hashed_password', sa.String(), nullable=False),
sa.Column('full_name', sa.String(), nullable=True),
sa.Column('is_active', sa.Boolean(), nullable=True),
sa.Column('is_superuser', sa.Boolean(), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('(CURRENT_TIMESTAMP)'), nullable=True),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False)
# Create customers table
op.create_table(
'customers',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('first_name', sa.String(), nullable=False),
sa.Column('last_name', sa.String(), nullable=False),
sa.Column('email', sa.String(), nullable=False),
sa.Column('phone_number', sa.String(), nullable=True),
sa.Column('address', sa.String(), nullable=True),
sa.Column('date_of_birth', sa.DateTime(), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('(CURRENT_TIMESTAMP)'), nullable=True),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_customers_email'), 'customers', ['email'], unique=True)
op.create_index(op.f('ix_customers_id'), 'customers', ['id'], unique=False)
# Create policies table
op.create_table(
'policies',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('policy_number', sa.String(), nullable=False),
sa.Column('customer_id', sa.Integer(), nullable=False),
sa.Column('policy_type', sa.Enum('auto', 'home', 'life', 'health', 'travel', name='policytype'), nullable=False),
sa.Column('status', sa.Enum('active', 'expired', 'cancelled', 'pending', name='policystatus'), nullable=False),
sa.Column('start_date', sa.DateTime(), nullable=False),
sa.Column('end_date', sa.DateTime(), nullable=False),
sa.Column('premium_amount', sa.Float(), nullable=False),
sa.Column('coverage_amount', sa.Float(), nullable=False),
sa.Column('deductible_amount', sa.Float(), nullable=True),
sa.Column('description', sa.String(), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('(CURRENT_TIMESTAMP)'), nullable=True),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_policies_id'), 'policies', ['id'], unique=False)
op.create_index(op.f('ix_policies_policy_number'), 'policies', ['policy_number'], unique=True)
# Create claims table
op.create_table(
'claims',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('claim_number', sa.String(), nullable=False),
sa.Column('policy_id', sa.Integer(), nullable=False),
sa.Column('incident_date', sa.DateTime(), nullable=False),
sa.Column('report_date', sa.DateTime(), server_default=sa.text('(CURRENT_TIMESTAMP)'), nullable=False),
sa.Column('description', sa.String(), nullable=False),
sa.Column('claim_amount', sa.Float(), nullable=False),
sa.Column('status', sa.Enum('submitted', 'under_review', 'approved', 'denied', 'paid', 'closed', name='claimstatus'), nullable=False),
sa.Column('settlement_amount', sa.Float(), nullable=True),
sa.Column('settlement_date', sa.DateTime(), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('(CURRENT_TIMESTAMP)'), nullable=True),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(['policy_id'], ['policies.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_claims_claim_number'), 'claims', ['claim_number'], unique=True)
op.create_index(op.f('ix_claims_id'), 'claims', ['id'], unique=False)
def downgrade() -> None:
# Drop tables in reverse order
op.drop_index(op.f('ix_claims_id'), table_name='claims')
op.drop_index(op.f('ix_claims_claim_number'), table_name='claims')
op.drop_table('claims')
op.drop_index(op.f('ix_policies_policy_number'), table_name='policies')
op.drop_index(op.f('ix_policies_id'), table_name='policies')
op.drop_table('policies')
op.drop_index(op.f('ix_customers_id'), table_name='customers')
op.drop_index(op.f('ix_customers_email'), table_name='customers')
op.drop_table('customers')
op.drop_index(op.f('ix_users_id'), table_name='users')
op.drop_index(op.f('ix_users_email'), table_name='users')
op.drop_table('users')