in fronts-client/src/services/recipeQuery.ts [103:186]
url: updateImageScalingParams(recep.featuredImage.url),
}
: undefined,
};
} catch (err) {
console.error(err);
return recep;
}
};
const recipeQuery = (baseUrl: string) => {
const captureErrors = (status: number, content: string, url: string) => {
const existingContext = Raven.getContext();
Raven.setUserContext({ ...existingContext, recipeSearchResponse: content });
Raven.captureMessage(`${url} returned ${status}`);
Raven.setUserContext(existingContext);
console.error(content);
};
const fetchOne = async (href: string): Promise<Recipe | undefined> => {
const response = await fetch(`${baseUrl}${href}`);
switch (response.status) {
case 200:
const content = await response.json();
return setupRecipeThumbnails(content as unknown as Recipe);
case 404:
case 403:
console.warn(
`Search response returned outdated recipe ${baseUrl}${href}`,
);
return undefined;
default:
console.error(`Could not retrieve recipe ${href}: ${response.status}`);
return undefined;
}
};
const fetchAllRecipes = async (
forRecipes: RecipeSearchTitlesResponse[],
): Promise<RecipeSearchHit[]> => {
const results = await Promise.all(
forRecipes.map((r) =>
fetchOne(r.href)
.then((recep) =>
recep
? {
...recep,
score: r.score,
}
: undefined,
)
.catch(console.warn),
),
);
return results.filter((r) => !!r) as RecipeSearchHit[];
};
const baseUrlForKwType = (kwType: FeastKeywordType) => {
switch (kwType) {
case 'celebration':
return `${baseUrl}/keywords/celebrations`;
case 'mealType':
return `${baseUrl}/keywords/meal-types`;
case 'cuisine':
return `${baseUrl}/keywords/cuisines`;
case 'diet':
return `${baseUrl}/keywords/diet-ids`;
}
};
return {
chefs: async (params: ChefSearchParams): Promise<ChefSearchResponse> => {
const args = [
params.query ? `q=${encodeURIComponent(params.query)}` : undefined,
params.limit ? `limit=${encodeURIComponent(params.limit)}` : undefined,
].filter((arg) => !!arg);
const queryString = args.length > 0 ? '?' + args.join('&') : '';
const url = `${baseUrl}/keywords/contributors${queryString}`;
const response = await fetch(url);
const content = await response.text();
if (response.status == 200) {