[models] simplify calories and macros'

This commit is contained in:
Piotr Domański 2026-04-07 17:39:39 +02:00
parent 0ea4c0b4b0
commit 57e1732ef1
3 changed files with 29 additions and 31 deletions

View file

@ -2,10 +2,8 @@ from typing import Annotated
from pydantic import ConfigDict, Field from pydantic import ConfigDict, Field
Macronutrient = Annotated[float, Field(ge=0, le=100)] Macronutrient = Annotated[float, Field(ge=0)]
OptionalMacronutrient = Annotated[float | None, Field(default=None, ge=0, le=100)]
Calories = Annotated[float, Field(ge=0)] Calories = Annotated[float, Field(ge=0)]
OptionalCalories = Annotated[float | None, Field(default=None, ge=0)]
class ObjModelMixin: class ObjModelMixin:

View file

@ -1,31 +1,31 @@
from typing import Annotated
from .base import ( from .base import (
ObjModelMixin, ObjModelMixin,
Macronutrient,
OptionalMacronutrient,
Calories, Calories,
OptionalCalories,
) )
from pydantic import BaseModel from pydantic import BaseModel, Field
from fooder.utils.calories import calculate_calories from fooder.utils.calories import calculate_calories
MacronutrientPer100g = Annotated[float, Field(ge=0, le=100)]
class ProductModel(ObjModelMixin, BaseModel): class ProductModel(ObjModelMixin, BaseModel):
name: str name: str
protein: Macronutrient protein: MacronutrientPer100g
carb: Macronutrient carb: MacronutrientPer100g
fat: Macronutrient fat: MacronutrientPer100g
fiber: Macronutrient fiber: MacronutrientPer100g
calories: Calories calories: Calories
barcode: str | None = None barcode: str | None = None
class ProductCreateModel(BaseModel): class ProductCreateModel(BaseModel):
name: str name: str
protein: Macronutrient protein: MacronutrientPer100g
carb: Macronutrient carb: MacronutrientPer100g
fat: Macronutrient fat: MacronutrientPer100g
fiber: Macronutrient fiber: MacronutrientPer100g
calories: OptionalCalories = None calories: Calories | None = None
barcode: str | None = None barcode: str | None = None
@property @property
@ -44,9 +44,9 @@ class ProductCreateModel(BaseModel):
class ProductUpdateModel(BaseModel): class ProductUpdateModel(BaseModel):
name: str | None = None name: str | None = None
protein: OptionalMacronutrient = None protein: MacronutrientPer100g | None = None
carb: OptionalMacronutrient = None carb: MacronutrientPer100g | None = None
fat: OptionalMacronutrient = None fat: MacronutrientPer100g | None = None
fiber: OptionalMacronutrient = None fiber: MacronutrientPer100g | None = None
calories: OptionalCalories = None calories: Calories | None = None
barcode: str | None = None barcode: str | None = None

View file

@ -1,18 +1,18 @@
from .base import ObjModelMixin, Calories, OptionalCalories from .base import ObjModelMixin, Macronutrient, Calories
from pydantic import BaseModel from pydantic import BaseModel
class UserSettingsModel(ObjModelMixin, BaseModel): class UserSettingsModel(ObjModelMixin, BaseModel):
protein_goal: Calories protein_goal: Macronutrient
carb_goal: Calories carb_goal: Macronutrient
fat_goal: Calories fat_goal: Macronutrient
fiber_goal: Calories fiber_goal: Macronutrient
calories_goal: Calories calories_goal: Calories
class UserSettingsUpdateModel(BaseModel): class UserSettingsUpdateModel(BaseModel):
protein_goal: OptionalCalories = None protein_goal: Macronutrient | None = None
carb_goal: OptionalCalories = None carb_goal: Macronutrient | None = None
fat_goal: OptionalCalories = None fat_goal: Macronutrient | None = None
fiber_goal: OptionalCalories = None fiber_goal: Macronutrient | None = None
calories_goal: OptionalCalories = None calories_goal: Calories | None = None