from typing import List, Optional from sqlalchemy.orm import Session from app.models.cart import CartItem from app.schemas.cart import CartItemCreate, CartItemUpdate from app.services.base import CRUDBase class CartService(CRUDBase[CartItem, CartItemCreate, CartItemUpdate]): def get_cart_items(self, db: Session, *, user_id: int) -> List[CartItem]: return db.query(CartItem).filter(CartItem.user_id == user_id).all() def get_cart_item( self, db: Session, *, user_id: int, product_id: int ) -> Optional[CartItem]: return ( db.query(CartItem) .filter(CartItem.user_id == user_id, CartItem.product_id == product_id) .first() ) def add_item_to_cart( self, db: Session, *, obj_in: CartItemCreate, user_id: int, unit_price: float ) -> CartItem: db_obj = CartItem( user_id=user_id, product_id=obj_in.product_id, quantity=obj_in.quantity, unit_price=unit_price ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def update_item_quantity( self, db: Session, *, db_obj: CartItem, quantity: int ) -> CartItem: db_obj.quantity = quantity db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def clear_cart(self, db: Session, *, user_id: int) -> List[CartItem]: cart_items = self.get_cart_items(db, user_id=user_id) for item in cart_items: db.delete(item) db.commit() return cart_items cart_service = CartService(CartItem)