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

92 lines
2.5 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from app.crud.base import CRUDBase
from app.models.cart import CartItem
from app.schemas.cart import CartItemCreate, CartItemUpdate
class CRUDCartItem(CRUDBase[CartItem, CartItemCreate, CartItemUpdate]):
def get_by_user_and_product(
self, db: Session, *, user_id: int, product_id: int
) -> Optional[CartItem]:
"""
Get a cart item by user ID and product ID.
Args:
db: Database session
user_id: User ID
product_id: Product ID
Returns:
The cart item or None if not found
"""
return (
db.query(self.model)
.filter(self.model.user_id == user_id, self.model.product_id == product_id)
.first()
)
def get_user_cart(self, db: Session, *, user_id: int) -> List[CartItem]:
"""
Get all cart items for a user.
Args:
db: Database session
user_id: User ID
Returns:
List of cart items
"""
return db.query(self.model).filter(self.model.user_id == user_id).all()
def create_or_update(
self, db: Session, *, user_id: int, obj_in: CartItemCreate
) -> CartItem:
"""
Create a new cart item or update the quantity if it already exists.
Args:
db: Database session
user_id: User ID
obj_in: Cart item data
Returns:
The created or updated cart item
"""
cart_item = self.get_by_user_and_product(
db, user_id=user_id, product_id=obj_in.product_id
)
if cart_item:
# Update existing cart item
cart_item.quantity += obj_in.quantity
db.add(cart_item)
db.commit()
db.refresh(cart_item)
return cart_item
else:
# Create new cart item
db_obj = CartItem(
user_id=user_id, product_id=obj_in.product_id, quantity=obj_in.quantity
)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
def clear_cart(self, db: Session, *, user_id: int) -> None:
"""
Remove all cart items for a user.
Args:
db: Database session
user_id: User ID
"""
db.query(self.model).filter(self.model.user_id == user_id).delete()
db.commit()
cart_item = CRUDCartItem(CartItem)