from .base import ObjModelMixin from pydantic import BaseModel, Field from fooder.utils.calories import calculate_calories class ProductModelBase(BaseModel): name: str protein: float = Field(ge=0, le=100) carb: float = Field(ge=0, le=100) fat: float = Field(ge=0, le=100) fiber: float = Field(ge=0, le=100) calories: float = Field(ge=0) barcode: str | None class ProductModel(ObjModelMixin, ProductModelBase): pass class ProductCreateModel(ProductModelBase): calories: float | None = None barcode: str | None = None @property def resolved_calories(self) -> float: return self.calories or calculate_calories( protein=self.protein, carb=self.carb, fat=self.fat, fiber=self.fiber, ) class ProductUpdateModel(ProductModelBase): name: str | None = None protein: float | None = None carb: float | None = None fat: float | None = None fiber: float | None = None calories: float | None = None barcode: str | None = None