46 lines
1.2 KiB
Python
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
|