fooder-api/fooder/model/product.py
2026-04-07 16:49:30 +02:00

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