59 lines
959 B
Python
59 lines
959 B
Python
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# Cart Item schemas
|
|
class CartItemBase(BaseModel):
|
|
product_id: int
|
|
quantity: int = Field(..., gt=0)
|
|
|
|
|
|
class CartItemCreate(CartItemBase):
|
|
pass
|
|
|
|
|
|
class CartItemUpdate(BaseModel):
|
|
quantity: Optional[int] = Field(None, gt=0)
|
|
|
|
|
|
class CartItemResponse(CartItemBase):
|
|
id: int
|
|
unit_price: float
|
|
subtotal: float
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# Cart schemas
|
|
class CartBase(BaseModel):
|
|
user_id: int
|
|
|
|
|
|
class CartCreate(CartBase):
|
|
pass
|
|
|
|
|
|
class CartResponse(CartBase):
|
|
id: int
|
|
items: List[CartItemResponse] = []
|
|
total: float
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# Schema for adding items to cart
|
|
class AddToCartRequest(CartItemBase):
|
|
pass
|
|
|
|
|
|
# Schema for cart summary
|
|
class CartSummary(BaseModel):
|
|
id: int
|
|
total: float
|
|
items_count: int
|
|
|
|
class Config:
|
|
from_attributes = True |