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