remix-demo

react router (remix) demo

git clone https://9o.is/git/remix-demo.git

food.server.ts

(1357B)


      1 import type { Params } from "@remix-run/react";
      2 import { json } from "@remix-run/server-runtime";
      3 import { getFoodByName, searchFoodNames } from "~/services/nutritionix.server";
      4 import { requireUserId } from "~/session.server";
      5 
      6 export async function foodsByName(request: Request) {
      7   await requireUserId(request);
      8   const query = new URL(request.url).searchParams.get("query");
      9 
     10   if (!query) {
     11     return json({ error: { query: "'query' query parameter is missing" } });
     12   }
     13 
     14   try {
     15     return json(await searchFoodNames(query));
     16   } catch (error) {
     17     console.error("Failed to list food names from nutrition api:", error);
     18     throw json({ error: "Failed to list food names" }, { status: 500 });
     19   }
     20 }
     21 
     22 export async function foodByName(request: Request, params: Params) {
     23   await requireUserId(request);
     24   const foodName = params.name;
     25 
     26   if (!foodName) {
     27     return json(
     28       { error: { query: "Food name parameter is missing" } },
     29       { status: 422 }
     30     );
     31   }
     32 
     33   try {
     34     const food = await getFoodByName(foodName);
     35 
     36     if (!food) {
     37       return json(
     38         { error: { name: "Food name does not exist" } },
     39         { status: 404 }
     40       );
     41     }
     42 
     43     return json(food);
     44   } catch (error) {
     45     console.error("Failed to get food from nutrition api:", error);
     46     throw json({ error: "Failed to get food nutrition" }, { status: 500 });
     47   }
     48 }