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

52 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