From a087760d53965b4152d43fe139f5bc49def3e964 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Mon, 28 Jul 2025 06:25:49 -0500 Subject: [PATCH] fix: Optimize Recipe Timeline Requests (#5811) --- .../Domain/Recipe/RecipeCardMobile.vue | 13 ++++++++++- .../Domain/Recipe/RecipeTimeline.vue | 22 +++++++++---------- .../Domain/Recipe/RecipeTimelineItem.vue | 1 + .../pages/g/[groupSlug]/recipes/timeline.vue | 5 ++++- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/frontend/components/Domain/Recipe/RecipeCardMobile.vue b/frontend/components/Domain/Recipe/RecipeCardMobile.vue index c6c0cdbec..e5d74569d 100644 --- a/frontend/components/Domain/Recipe/RecipeCardMobile.vue +++ b/frontend/components/Domain/Recipe/RecipeCardMobile.vue @@ -3,7 +3,10 @@ diff --git a/frontend/components/Domain/Recipe/RecipeTimeline.vue b/frontend/components/Domain/Recipe/RecipeTimeline.vue index 49ed1694d..56be7b42b 100644 --- a/frontend/components/Domain/Recipe/RecipeTimeline.vue +++ b/frontend/components/Domain/Recipe/RecipeTimeline.vue @@ -242,28 +242,28 @@ export default defineNuxtComponent({ alert.success(i18n.t("events.event-deleted") as string); }; - async function getRecipe(recipeId: string): Promise { - const { data } = await api.recipes.getOne(recipeId); - return data; + async function getRecipes(recipeIds: string[]): Promise { + const qf = "id IN [" + recipeIds.map(id => `"${id}"`).join(", ") + "]"; + const { data } = await api.recipes.getAll(1, -1, { queryFilter: qf }); + return data?.items || []; }; async function updateRecipes(events: RecipeTimelineEventOut[]) { - const recipePromises: Promise[] = []; - const seenRecipeIds: string[] = []; + const recipeIds: string[] = []; events.forEach((event) => { - if (seenRecipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) { + if (recipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) { return; } - seenRecipeIds.push(event.recipeId); - recipePromises.push(getRecipe(event.recipeId)); + recipeIds.push(event.recipeId); }); - const results = await Promise.all(recipePromises); + const results = await getRecipes(recipeIds); results.forEach((result) => { - if (result && result.id) { - recipes.set(result.id, result); + if (!result?.id) { + return; } + recipes.set(result.id, result); }); } diff --git a/frontend/components/Domain/Recipe/RecipeTimelineItem.vue b/frontend/components/Domain/Recipe/RecipeTimelineItem.vue index 1913ae36d..531d52241 100644 --- a/frontend/components/Domain/Recipe/RecipeTimelineItem.vue +++ b/frontend/components/Domain/Recipe/RecipeTimelineItem.vue @@ -53,6 +53,7 @@ - +