from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.database.database import get_db from app.schemas.cart import CartItemCreate, CartItemUpdate, CartResponse from app.services.cart import ( add_to_cart, get_cart, update_cart_item, remove_from_cart, clear_cart, ) from app.services.auth import get_current_user from app.models import User router = APIRouter(prefix="/api/cart", tags=["cart"]) @router.get("", response_model=CartResponse) def get_user_cart( current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): cart = get_cart(db, current_user.id) if not cart: raise HTTPException(status_code=404, detail="Cart not found") return cart @router.post("/add", response_model=dict) def add_item_to_cart( item: CartItemCreate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): cart_item = add_to_cart(db, current_user.id, item) return {"message": "Item added to cart", "item_id": cart_item.id} @router.put("/{cart_item_id}", response_model=dict) def update_item( cart_item_id: int, update: CartItemUpdate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): cart_item = update_cart_item(db, cart_item_id, update) if not cart_item: raise HTTPException(status_code=404, detail="Cart item not found") return {"message": "Item updated", "quantity": cart_item.quantity} @router.delete("/{cart_item_id}") def remove_item( cart_item_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): if not remove_from_cart(db, cart_item_id): raise HTTPException(status_code=404, detail="Cart item not found") return {"message": "Item removed from cart"} @router.delete("") def clear_user_cart( current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): if not clear_cart(db, current_user.id): raise HTTPException(status_code=404, detail="Cart not found") return {"message": "Cart cleared"}