"""Initial migration Revision ID: 001 Revises: Create Date: 2024-01-01 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 customers table op.create_table('customers', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('name', sa.String(length=100), nullable=False), sa.Column('email', sa.String(length=100), nullable=False, index=True), sa.Column('phone', sa.String(length=20), nullable=False), sa.Column('address', sa.Text(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP')), sa.Column('updated_at', sa.DateTime(timezone=True), onupdate=sa.text('CURRENT_TIMESTAMP')), sa.UniqueConstraint('email') ) # Create drivers table op.create_table('drivers', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('name', sa.String(length=100), nullable=False), sa.Column('email', sa.String(length=100), nullable=False, index=True), sa.Column('phone', sa.String(length=20), nullable=False), sa.Column('vehicle_type', sa.String(length=50), nullable=False), sa.Column('vehicle_plate', sa.String(length=20), nullable=False), sa.Column('is_available', sa.Boolean(), default=True), sa.Column('rating', sa.Float(), default=5.0), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP')), sa.Column('updated_at', sa.DateTime(timezone=True), onupdate=sa.text('CURRENT_TIMESTAMP')), sa.UniqueConstraint('email') ) # Create orders table op.create_table('orders', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('customer_id', sa.Integer(), sa.ForeignKey('customers.id'), nullable=False), sa.Column('driver_id', sa.Integer(), sa.ForeignKey('drivers.id'), nullable=True), sa.Column('pickup_address', sa.Text(), nullable=False), sa.Column('delivery_address', sa.Text(), nullable=False), sa.Column('package_description', sa.Text(), nullable=True), sa.Column('weight', sa.Float(), nullable=True), sa.Column('price', sa.Float(), nullable=False), sa.Column('status', sa.Enum('PENDING', 'CONFIRMED', 'PICKED_UP', 'IN_TRANSIT', 'DELIVERED', 'CANCELLED', name='orderstatus'), default='PENDING'), sa.Column('notes', sa.Text(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP')), sa.Column('updated_at', sa.DateTime(timezone=True), onupdate=sa.text('CURRENT_TIMESTAMP')) ) def downgrade() -> None: op.drop_table('orders') op.drop_table('drivers') op.drop_table('customers')