Skip to content

Commit 35330da

Browse files
authored
fix: friends mapping error, get similar recipes cache (#1501)
2 parents 6626596 + db9d66e commit 35330da

File tree

4 files changed

+81
-5
lines changed

4 files changed

+81
-5
lines changed

packages/frontend/src/app/pages/home/home.page.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ export class HomePage {
248248
}
249249
}
250250

251-
async resetAndLoadAll(scrollToIndex?: number): Promise<any> {
251+
async resetAndLoadAll(scrollToIndex?: number): Promise<[void, void] | void> {
252252
this.reloadPending = false;
253253

254254
// Load labels & recipes in parallel if user hasn't selected labels that need to be verified for existence
@@ -403,10 +403,13 @@ export class HomePage {
403403
);
404404
if (!response) return;
405405

406-
this.friendsById = response.friends.reduce((acc: any, friendEntry: any) => {
407-
acc[friendEntry.otherUser.id] = friendEntry.otherUser;
408-
return acc;
409-
}, {});
406+
this.friendsById = response.friends.reduce(
407+
(acc, friendEntry) => {
408+
acc[friendEntry.id] = friendEntry;
409+
return acc;
410+
},
411+
{} as Record<string, UserPublic>,
412+
);
410413
}
411414

412415
toggleLabel(labelTitle: string) {

packages/frontend/src/app/utils/serviceWorker/routes/recipes/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export { registerGetRecipesRoute } from "./registerGetRecipesRoute";
22
export { registerGetRecipeRoute } from "./registerGetRecipeRoute";
3+
export { registerGetSimilarRecipesRoute } from "./registerGetSimilarRecipesRoute";
34
export { registerSearchRecipesRoute } from "./registerSearchRecipesRoute";
45
export { registerUpdateRecipeRoute } from "./registerUpdateRecipeRoute";
56
export { registerCreateRecipeRoute } from "./registerCreateRecipeRoute";
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { registerRoute } from "workbox-routing";
2+
import {
3+
swAssertStatusCacheDivert,
4+
swCacheReject,
5+
} from "../../swErrorHandling";
6+
import { getLocalDb, ObjectStoreName } from "../../../localDb";
7+
import type { RecipeSummary } from "@recipesage/prisma";
8+
import { getTrpcInputForEvent } from "../../getTrpcInputForEvent";
9+
import { trpcClient as trpc } from "../../../trpcClient";
10+
import { encodeCacheResultForTrpc } from "../../encodeCacheResultForTrpc";
11+
12+
export const registerGetSimilarRecipesRoute = () => {
13+
registerRoute(
14+
/((https:\/\/api(\.beta)?\.recipesage\.com)|(\/api))\/trpc\/recipes\.getSimilarRecipes/,
15+
async (event) => {
16+
try {
17+
const response = await fetch(event.request);
18+
19+
swAssertStatusCacheDivert(response);
20+
21+
return response;
22+
} catch (e) {
23+
const input =
24+
getTrpcInputForEvent<
25+
Parameters<typeof trpc.recipes.getSimilarRecipes.query>[0]
26+
>(event);
27+
if (!input) return swCacheReject("No input provided", e);
28+
29+
const { recipeIds } = input;
30+
31+
const localDb = await getLocalDb();
32+
33+
const originRecipeTitles = new Set<string>();
34+
const originRecipeIngredients = new Set<string>();
35+
const originRecipeInstructions = new Set<string>();
36+
for (const recipeId of recipeIds) {
37+
const recipe: RecipeSummary | undefined = await localDb.get(
38+
ObjectStoreName.Recipes,
39+
recipeId,
40+
);
41+
42+
if (recipe) {
43+
originRecipeTitles.add(recipe.title);
44+
originRecipeIngredients.add(recipe.ingredients);
45+
originRecipeInstructions.add(recipe.instructions);
46+
}
47+
}
48+
49+
const recipes: RecipeSummary[] = await localDb.getAll(
50+
ObjectStoreName.Recipes,
51+
);
52+
53+
const similarRecipes = recipes.filter((recipe) => {
54+
return (
55+
originRecipeTitles.has(recipe.title) ||
56+
originRecipeIngredients.has(recipe.ingredients) ||
57+
originRecipeInstructions.has(recipe.instructions)
58+
);
59+
});
60+
61+
return encodeCacheResultForTrpc(
62+
similarRecipes satisfies Awaited<
63+
ReturnType<typeof trpc.recipes.getSimilarRecipes.query>
64+
>,
65+
);
66+
}
67+
},
68+
"GET",
69+
);
70+
};

packages/frontend/src/service-worker.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
registerUpdateRecipeRoute,
2222
registerCreateRecipeRoute,
2323
registerRecipeMutationWildcardRoute,
24+
registerGetSimilarRecipesRoute,
2425
} from "./app/utils/serviceWorker/routes/recipes";
2526
import {
2627
registerGetShoppingListsRoute,
@@ -122,6 +123,7 @@ registerRoute(
122123

123124
registerGetRecipesRoute();
124125
registerGetRecipeRoute();
126+
registerGetSimilarRecipesRoute();
125127
registerSearchRecipesRoute(searchManagerP);
126128
registerUpdateRecipeRoute(syncManagerP);
127129
registerCreateRecipeRoute(syncManagerP);

0 commit comments

Comments
 (0)