fooder-api/fooder/model/product.py
2026-04-07 17:07:38 +02:00

46 lines
1.2 KiB
Python

from .base import ObjModelMixin, Macronutrient, OptionalMacronutrient, Calories, OptionalCalories
from pydantic import BaseModel
from fooder.utils.calories import calculate_calories
class ProductModel(ObjModelMixin, BaseModel):
name: str
protein: Macronutrient
carb: Macronutrient
fat: Macronutrient
fiber: Macronutrient
calories: Calories
barcode: str | None = None
class ProductCreateModel(BaseModel):
name: str
protein: Macronutrient
carb: Macronutrient
fat: Macronutrient
fiber: Macronutrient
calories: OptionalCalories = 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(BaseModel):
name: str | None = None
protein: OptionalMacronutrient = None
carb: OptionalMacronutrient = None
fat: OptionalMacronutrient = None
fiber: OptionalMacronutrient = None
calories: OptionalCalories = None
barcode: str | None = None