simpleecommerceapi-x18lvr/migrations/versions/8e3ca9ec8ac8_initial_migration.py
Automated Action b078a91dd3 Implement simple ecommerce API with FastAPI and SQLite
- Setup project structure and FastAPI application
- Create SQLAlchemy models for users, products, carts, and orders
- Implement Alembic migrations
- Add CRUD operations and endpoints for all resources
- Setup authentication with JWT
- Add role-based access control
- Update documentation
2025-06-12 17:15:18 +00:00

141 lines
5.0 KiB
Python

"""Initial migration
Revision ID: 8e3ca9ec8ac8
Revises:
Create Date: 2023-08-07 12:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "8e3ca9ec8ac8"
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# 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, default=True),
sa.Column("is_superuser", sa.Boolean(), nullable=True, default=False),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.Column("updated_at", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_users_email"), "users", ["email"], unique=True)
op.create_index(op.f("ix_users_full_name"), "users", ["full_name"], unique=False)
op.create_index(op.f("ix_users_id"), "users", ["id"], unique=False)
# Create products table
op.create_table(
"products",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("name", sa.String(), nullable=False),
sa.Column("description", sa.Text(), nullable=True),
sa.Column("price", sa.Float(), nullable=False),
sa.Column("stock", sa.Integer(), nullable=False, default=0),
sa.Column("image_url", sa.String(), nullable=True),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.Column("updated_at", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_products_id"), "products", ["id"], unique=False)
op.create_index(op.f("ix_products_name"), "products", ["name"], unique=False)
# Create orders table
op.create_table(
"orders",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("user_id", sa.Integer(), nullable=False),
sa.Column(
"status",
sa.Enum(
"pending",
"paid",
"shipped",
"delivered",
"cancelled",
name="orderstatus",
),
nullable=False,
default="pending",
),
sa.Column("total_amount", sa.Float(), nullable=False),
sa.Column("shipping_address", sa.String(), nullable=False),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.Column("updated_at", sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(
["user_id"],
["users.id"],
),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_orders_id"), "orders", ["id"], unique=False)
# Create cart_items table
op.create_table(
"cart_items",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("user_id", sa.Integer(), nullable=False),
sa.Column("product_id", sa.Integer(), nullable=False),
sa.Column("quantity", sa.Integer(), nullable=False, default=1),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.Column("updated_at", sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(
["product_id"],
["products.id"],
),
sa.ForeignKeyConstraint(
["user_id"],
["users.id"],
),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_cart_items_id"), "cart_items", ["id"], unique=False)
# Create order_items table
op.create_table(
"order_items",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("order_id", sa.Integer(), nullable=False),
sa.Column("product_id", sa.Integer(), nullable=False),
sa.Column("quantity", sa.Integer(), nullable=False),
sa.Column("unit_price", sa.Float(), nullable=False),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(
["order_id"],
["orders.id"],
),
sa.ForeignKeyConstraint(
["product_id"],
["products.id"],
),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_order_items_id"), "order_items", ["id"], unique=False)
def downgrade():
op.drop_index(op.f("ix_order_items_id"), table_name="order_items")
op.drop_table("order_items")
op.drop_index(op.f("ix_cart_items_id"), table_name="cart_items")
op.drop_table("cart_items")
op.drop_index(op.f("ix_orders_id"), table_name="orders")
op.drop_table("orders")
op.drop_index(op.f("ix_products_name"), table_name="products")
op.drop_index(op.f("ix_products_id"), table_name="products")
op.drop_table("products")
op.drop_index(op.f("ix_users_id"), table_name="users")
op.drop_index(op.f("ix_users_full_name"), table_name="users")
op.drop_index(op.f("ix_users_email"), table_name="users")
op.drop_table("users")