2026-05-01 11:12:13 +03:00

83 lines
2.1 KiB
Python

from sqlalchemy.orm import Session
from app.models import Cart, CartItem, Product
from app.schemas.cart import CartItemCreate, CartItemUpdate
from typing import Optional
import uuid
def get_or_create_cart(db: Session, user_id: int) -> Cart:
cart = db.query(Cart).filter(Cart.user_id == user_id).first()
if not cart:
cart = Cart(user_id=user_id)
db.add(cart)
db.commit()
db.refresh(cart)
return cart
def add_to_cart(db: Session, user_id: int, item: CartItemCreate) -> CartItem:
cart = get_or_create_cart(db, user_id)
# Check if item already exists
existing_item = (
db.query(CartItem)
.filter(
CartItem.cart_id == cart.id,
CartItem.product_id == item.product_id,
CartItem.size == item.size,
CartItem.color == item.color,
)
.first()
)
if existing_item:
existing_item.quantity += item.quantity
db.commit()
db.refresh(existing_item)
return existing_item
cart_item = CartItem(cart_id=cart.id, **item.dict())
db.add(cart_item)
db.commit()
db.refresh(cart_item)
return cart_item
def get_cart(db: Session, user_id: int) -> Optional[Cart]:
return db.query(Cart).filter(Cart.user_id == user_id).first()
def update_cart_item(
db: Session, cart_item_id: int, update: CartItemUpdate
) -> Optional[CartItem]:
cart_item = db.query(CartItem).filter(CartItem.id == cart_item_id).first()
if not cart_item:
return None
if update.quantity:
cart_item.quantity = update.quantity
db.commit()
db.refresh(cart_item)
return cart_item
def remove_from_cart(db: Session, cart_item_id: int) -> bool:
cart_item = db.query(CartItem).filter(CartItem.id == cart_item_id).first()
if not cart_item:
return False
db.delete(cart_item)
db.commit()
return True
def clear_cart(db: Session, user_id: int) -> bool:
cart = get_cart(db, user_id)
if not cart:
return False
db.query(CartItem).filter(CartItem.cart_id == cart.id).delete()
db.commit()
return True