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