45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
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
|
|
if self.calories is not None
|
|
else 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
|