From 2123f55eabfabedec33856676c2bbc275587a2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Doma=C5=84ski?= Date: Wed, 1 Apr 2026 23:43:54 +0200 Subject: [PATCH] [meal] allow edit --- docker-compose.yml | 6 +++++- fooder/controller/meal.py | 12 ++++++++++++ fooder/model/entry.py | 6 +++--- fooder/model/meal.py | 6 ++++++ fooder/view/meal.py | 13 ++++++++++++- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e930502..e8bdb59 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,21 +19,24 @@ services: build: dockerfile: Dockerfile context: . + platform: linux/amd64 networks: - fooder env_file: - .env ports: - "8000:8000" + command: "uvicorn fooder.app:app --host 0.0.0.0 --port 8000 --workers 1 --reload" tasks: restart: unless-stopped image: registry.domandoman.xyz/fooder/api networks: - fooder + platform: linux/amd64 env_file: - .env - command: "uvicorn fooder.tasks_app:app --host 0.0.0.0 --port 8000 --workers 1" + command: "uvicorn fooder.tasks_app:app --host 0.0.0.0 --port 8000 --workers 1 --reload" cron: restart: unless-stopped @@ -41,6 +44,7 @@ services: build: dockerfile: Dockerfile.cron context: . + platform: linux/amd64 networks: - fooder env_file: diff --git a/fooder/controller/meal.py b/fooder/controller/meal.py index 717c45f..42bd5d5 100644 --- a/fooder/controller/meal.py +++ b/fooder/controller/meal.py @@ -7,6 +7,7 @@ from ..model.meal import ( CreateMealFromPresetPayload, CreateMealPayload, Meal, + RenameMealPayload, SaveMealPayload, ) from ..model.preset import Preset @@ -48,6 +49,17 @@ class SaveMeal(AuthorizedController): raise HTTPException(status_code=400, detail=e.args[0]) +class RenameMeal(AuthorizedController): + async def call(self, meal_id: int, payload: RenameMealPayload) -> Meal: + async with self.async_session.begin() as session: + meal = await DBMeal.get_by_id(session, self.user.id, meal_id) + if meal is None: + raise HTTPException(status_code=404, detail="meal not found") + meal.name = payload.name + await session.flush() + return Meal.from_orm(meal) + + class DeleteMeal(AuthorizedController): async def call(self, meal_id: int) -> None: async with self.async_session.begin() as session: diff --git a/fooder/model/entry.py b/fooder/model/entry.py index 11138d0..98e0225 100644 --- a/fooder/model/entry.py +++ b/fooder/model/entry.py @@ -33,6 +33,6 @@ class CreateEntryPayload(BaseModel): class UpdateEntryPayload(BaseModel): """CreateEntryPayload.""" - grams: Optional[float] - product_id: Optional[int] - meal_id: Optional[int] + grams: Optional[float] = None + product_id: Optional[int] = None + meal_id: Optional[int] = None diff --git a/fooder/model/meal.py b/fooder/model/meal.py index bf650f1..cec9c20 100644 --- a/fooder/model/meal.py +++ b/fooder/model/meal.py @@ -30,6 +30,12 @@ class CreateMealPayload(BaseModel): diary_id: int +class RenameMealPayload(BaseModel): + """RenameMealPayload.""" + + name: str + + class SaveMealPayload(BaseModel): """SaveMealPayload.""" diff --git a/fooder/view/meal.py b/fooder/view/meal.py index a727115..40a1f73 100644 --- a/fooder/view/meal.py +++ b/fooder/view/meal.py @@ -1,10 +1,11 @@ from fastapi import APIRouter, Depends, Request -from ..controller.meal import CreateMeal, CreateMealFromPreset, DeleteMeal, SaveMeal +from ..controller.meal import CreateMeal, CreateMealFromPreset, DeleteMeal, RenameMeal, SaveMeal from ..model.meal import ( CreateMealFromPresetPayload, CreateMealPayload, Meal, + RenameMealPayload, SaveMealPayload, ) from ..model.preset import Preset @@ -31,6 +32,16 @@ async def save_meal( return await contoller.call(meal_id, data) +@router.patch("/{meal_id}", response_model=Meal) +async def rename_meal( + request: Request, + meal_id: int, + data: RenameMealPayload, + contoller: RenameMeal = Depends(RenameMeal), +): + return await contoller.call(meal_id, data) + + @router.delete("/{meal_id}") async def delete_meal( request: Request,