diff --git a/frontend/composables/use-group-recipe-actions.ts b/frontend/composables/use-group-recipe-actions.ts index d1c5171e7..4a0be4668 100644 --- a/frontend/composables/use-group-recipe-actions.ts +++ b/frontend/composables/use-group-recipe-actions.ts @@ -4,6 +4,7 @@ import { useUserApi } from "~/composables/api"; import { GroupRecipeActionOut, GroupRecipeActionType } from "~/lib/api/types/household"; import { RequestResponse } from "~/lib/api/types/non-generated"; import { Recipe } from "~/lib/api/types/recipe"; +import { useScaledAmount } from "~/composables/recipes/use-scaled-amount"; const groupRecipeActions = ref(null); const loading = ref(false); @@ -69,7 +70,7 @@ export const useGroupRecipeActions = function ( window.open(url, "_blank")?.focus(); return; case "post": - return await api.groupRecipeActions.triggerAction(action.id, recipe.slug || ""); + return await api.groupRecipeActions.triggerAction(action.id, recipe.slug || "", useScaledAmount(recipe.recipeServings || 1, recipeScale).scaledAmount); default: break; } diff --git a/frontend/lib/api/user/group-recipe-actions.ts b/frontend/lib/api/user/group-recipe-actions.ts index d49cdecec..e2e0fe86e 100644 --- a/frontend/lib/api/user/group-recipe-actions.ts +++ b/frontend/lib/api/user/group-recipe-actions.ts @@ -13,7 +13,7 @@ const routes = { baseRoute = routes.groupRecipeActions; itemRoute = routes.groupRecipeActionsId; - async triggerAction(id: string | number, recipeSlug: string) { - return await this.requests.post(routes.groupRecipeActionsIdTriggerRecipeSlug(id, recipeSlug), {}); + async triggerAction(id: string | number, recipeSlug: string, scaledAmount: number) { + 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 a99c57765..ab210cd18 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 @@ -68,7 +68,9 @@ class GroupRecipeActionController(BaseUserController): # Actions @router.post("/{item_id}/trigger/{recipe_slug}", status_code=202) - def trigger_action(self, item_id: UUID4, recipe_slug: str, bg_tasks: BackgroundTasks) -> None: + def trigger_action( + self, item_id: UUID4, recipe_slug: str, bg_tasks: BackgroundTasks, scaled_amount: float = Body(1, embed=True) + ) -> None: recipe_action = self.repos.group_recipe_actions.get_one(item_id) if not recipe_action: raise HTTPException( @@ -93,7 +95,7 @@ class GroupRecipeActionController(BaseUserController): detail=ErrorResponse.respond(message="Not found."), ) from e - payload = GroupRecipeActionPayload(action=recipe_action, content=recipe) + payload = GroupRecipeActionPayload(action=recipe_action, content=recipe, scaled_amount=scaled_amount) bg_tasks.add_task( task_action, url=recipe_action.url, diff --git a/mealie/schema/household/group_recipe_action.py b/mealie/schema/household/group_recipe_action.py index 4794c8e65..7d96b4ccc 100644 --- a/mealie/schema/household/group_recipe_action.py +++ b/mealie/schema/household/group_recipe_action.py @@ -44,3 +44,4 @@ class GroupRecipeActionPagination(PaginationBase): class GroupRecipeActionPayload(MealieModel): action: GroupRecipeActionOut content: Any + 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 b55a9bfc6..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 @@ -173,6 +173,7 @@ def test_group_recipe_actions_trigger_post( response = api_client.post( 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: @@ -189,6 +190,7 @@ def test_group_recipe_actions_trigger_invalid_type(api_client: TestClient, uniqu response = api_client.post( 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