From b94eb30ebcc42c2cb9203d03ade90d1474ee0f0e Mon Sep 17 00:00:00 2001 From: Felix Schneider Date: Sun, 25 May 2025 13:55:04 +0200 Subject: [PATCH] refactor: set scaled_amount in request body --- frontend/lib/api/user/group-recipe-actions.ts | 4 ++-- .../households/controller_group_recipe_actions.py | 14 +++++++------- mealie/schema/household/group_recipe_action.py | 2 +- .../test_group_recipe_actions.py | 6 ++++-- tests/utils/api_routes/__init__.py | 6 +++--- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/frontend/lib/api/user/group-recipe-actions.ts b/frontend/lib/api/user/group-recipe-actions.ts index a1f00a484..e2e0fe86e 100644 --- a/frontend/lib/api/user/group-recipe-actions.ts +++ b/frontend/lib/api/user/group-recipe-actions.ts @@ -6,7 +6,7 @@ const prefix = "/api"; const routes = { groupRecipeActions: `${prefix}/households/recipe-actions`, groupRecipeActionsId: (id: string | number) => `${prefix}/households/recipe-actions/${id}`, - groupRecipeActionsIdTriggerRecipeSlug: (id: string | number, recipeSlug: string, scaledAmount: number) => `${prefix}/households/recipe-actions/${id}/trigger/${recipeSlug}/${scaledAmount}`, + groupRecipeActionsIdTriggerRecipeSlug: (id: string | number, recipeSlug: string) => `${prefix}/households/recipe-actions/${id}/trigger/${recipeSlug}`, }; export class GroupRecipeActionsAPI extends BaseCRUDAPI { @@ -14,6 +14,6 @@ const routes = { itemRoute = routes.groupRecipeActionsId; async triggerAction(id: string | number, recipeSlug: string, scaledAmount: number) { - return await this.requests.post(routes.groupRecipeActionsIdTriggerRecipeSlug(id, recipeSlug, scaledAmount), {}); + return await this.requests.post(routes.groupRecipeActionsIdTriggerRecipeSlug(id, recipeSlug), {scaledAmount}); } } diff --git a/mealie/routes/households/controller_group_recipe_actions.py b/mealie/routes/households/controller_group_recipe_actions.py index b6c8c62f9..04dff68be 100644 --- a/mealie/routes/households/controller_group_recipe_actions.py +++ b/mealie/routes/households/controller_group_recipe_actions.py @@ -1,7 +1,7 @@ from functools import cached_property import requests -from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status +from fastapi import APIRouter, BackgroundTasks, Body, Depends, HTTPException, status from fastapi.encoders import jsonable_encoder from pydantic import UUID4 @@ -67,8 +67,10 @@ class GroupRecipeActionController(BaseUserController): # ================================================================================================================== # Actions - @router.post("/{item_id}/trigger/{recipe_slug}/{scaled_amount}", status_code=202) - def trigger_action(self, item_id: UUID4, recipe_slug: str, scaled_amount: float, bg_tasks: BackgroundTasks) -> None: + @router.post("/{item_id}/trigger/{recipe_slug}", status_code=202) + def trigger_action( + self, item_id: UUID4, recipe_slug: str, bg_tasks: BackgroundTasks, scaled_amount: float = Body(..., embed=True) + ) -> None: recipe_action = self.repos.group_recipe_actions.get_one(item_id) if not recipe_action: raise HTTPException( @@ -93,12 +95,10 @@ class GroupRecipeActionController(BaseUserController): detail=ErrorResponse.respond(message="Not found."), ) from e - payload = GroupRecipeActionPayload( - action=recipe_action, content=recipe, scaled_amount=scaled_amount - ).model_dump() + payload = GroupRecipeActionPayload(action=recipe_action, content=recipe, scaled_amount=scaled_amount) bg_tasks.add_task( task_action, url=recipe_action.url, - json=jsonable_encoder(payload), + json=jsonable_encoder(payload.model_dump()), timeout=15, ) diff --git a/mealie/schema/household/group_recipe_action.py b/mealie/schema/household/group_recipe_action.py index 54df1c17f..7d96b4ccc 100644 --- a/mealie/schema/household/group_recipe_action.py +++ b/mealie/schema/household/group_recipe_action.py @@ -44,4 +44,4 @@ class GroupRecipeActionPagination(PaginationBase): class GroupRecipeActionPayload(MealieModel): action: GroupRecipeActionOut content: Any - scaled_amount: float | None = None + scaled_amount: float diff --git a/tests/integration_tests/user_household_tests/test_group_recipe_actions.py b/tests/integration_tests/user_household_tests/test_group_recipe_actions.py index ec0b81c4a..11442ffb9 100644 --- a/tests/integration_tests/user_household_tests/test_group_recipe_actions.py +++ b/tests/integration_tests/user_household_tests/test_group_recipe_actions.py @@ -171,8 +171,9 @@ def test_group_recipe_actions_trigger_post( recipe_slug = recipe.slug response = api_client.post( - api_routes.households_recipe_actions_item_id_trigger_recipe_slug(action_id, recipe_slug, 1.0), + api_routes.households_recipe_actions_item_id_trigger_recipe_slug(action_id, recipe_slug), headers=unique_user.token, + json={"scaled_amount": 1.0}, ) if missing_action or missing_recipe: @@ -187,8 +188,9 @@ def test_group_recipe_actions_trigger_invalid_type(api_client: TestClient, uniqu recipe = unique_user.repos.recipes.create(new_recipe(unique_user)) response = api_client.post( - api_routes.households_recipe_actions_item_id_trigger_recipe_slug(recipe_action.id, recipe.id, 1.0), + api_routes.households_recipe_actions_item_id_trigger_recipe_slug(recipe_action.id, recipe.id), headers=unique_user.token, + json={"scaled_amount": 1.0}, ) assert response.status_code == 400 diff --git a/tests/utils/api_routes/__init__.py b/tests/utils/api_routes/__init__.py index af3ec5a62..02aee25c9 100644 --- a/tests/utils/api_routes/__init__.py +++ b/tests/utils/api_routes/__init__.py @@ -365,9 +365,9 @@ def households_recipe_actions_item_id(item_id): return f"{prefix}/households/recipe-actions/{item_id}" -def households_recipe_actions_item_id_trigger_recipe_slug(item_id, recipe_slug, scaled_amount): - """`/api/households/recipe-actions/{item_id}/trigger/{recipe_slug}/{scaled_amount}`""" - return f"{prefix}/households/recipe-actions/{item_id}/trigger/{recipe_slug}/{scaled_amount}" +def households_recipe_actions_item_id_trigger_recipe_slug(item_id, recipe_slug): + """`/api/households/recipe-actions/{item_id}/trigger/{recipe_slug}`""" + return f"{prefix}/households/recipe-actions/{item_id}/trigger/{recipe_slug}" def households_self_recipes_recipe_slug(recipe_slug):