50 lines
1.1 KiB
Python

import json
from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field, validator
class CartItemBase(BaseModel):
product_id: str
quantity: int = Field(..., gt=0)
custom_properties: dict[str, Any] | None = None
class CartItemCreate(CartItemBase):
pass
class CartItemUpdate(BaseModel):
quantity: int | None = Field(None, gt=0)
custom_properties: dict[str, Any] | None = None
class CartItemInDBBase(CartItemBase):
id: str
user_id: str
price_at_addition: float
created_at: datetime
updated_at: datetime | None = None
class Config:
orm_mode = True
@validator('custom_properties', pre=True)
def parse_custom_properties(cls, v):
if isinstance(v, str):
try:
return json.loads(v)
except:
return None
return v
class CartItem(CartItemInDBBase):
product_name: str
product_image: str | None = None
current_price: float
subtotal: float
class CartSummary(BaseModel):
items: list[CartItem]
total_items: int
subtotal: float
total_weight: float | None = None