deliverybusinessapi-ye6i6y/alembic/versions/001_initial_migration.py
Automated Action b3827bf6b3 Add complete FastAPI delivery business backend
- Created customer, driver, and order models with SQLAlchemy
- Implemented CRUD API endpoints for all entities
- Set up SQLite database with Alembic migrations
- Added health check and base URL endpoints
- Configured CORS middleware for all origins
- Updated README with comprehensive documentation
2025-06-27 09:19:00 +00:00

66 lines
2.8 KiB
Python

"""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')