fooder-api/fooder/controller/diary.py
Piotr Domański b112295d6a
Some checks are pending
Python lint and test / linttest (push) Waiting to run
[prod] works
2026-04-07 23:11:03 +02:00

47 lines
1.6 KiB
Python

import datetime
from fooder.context import Context
from fooder.controller.base import ModelController
from fooder.domain import Diary
from fooder.domain.user_settings import UserSettings
from fooder.model.diary import DiaryUpdateModel
from fooder.utils.calories import calculate_calories
class DiaryController(ModelController[Diary]):
@classmethod
async def create(
cls, ctx: Context, date: datetime.date, settings: UserSettings
) -> "DiaryController":
obj = Diary(
user_id=ctx.user.id,
date=date,
protein_goal=settings.protein_goal,
carb_goal=settings.carb_goal,
fat_goal=settings.fat_goal,
fiber_goal=settings.fiber_goal,
calories_goal=settings.calories_goal,
)
await ctx.repo.diary.create(obj)
return cls(ctx, obj)
async def update(self, data: DiaryUpdateModel) -> None:
if data.protein_goal is not None:
self.obj.protein_goal = data.protein_goal
if data.carb_goal is not None:
self.obj.carb_goal = data.carb_goal
if data.fat_goal is not None:
self.obj.fat_goal = data.fat_goal
if data.fiber_goal is not None:
self.obj.fiber_goal = data.fiber_goal
if data.calories_goal is not None:
self.obj.calories_goal = data.calories_goal
else:
self.obj.calories_goal = calculate_calories(
protein=self.obj.protein_goal,
carb=self.obj.carb_goal,
fat=self.obj.fat_goal,
fiber=self.obj.fiber_goal,
)
await self.ctx.repo.diary.update(self.obj)