From 6f0f8171d3d1c2d3161d3b4158be90da5ede79c4 Mon Sep 17 00:00:00 2001 From: Dennis Lustre Date: Fri, 2 Feb 2024 17:39:03 -0800 Subject: [PATCH] refactor: move parse into the menuRouter --- packages/api/src/root.ts | 2 -- packages/api/src/router/menu.ts | 54 ++++++++++++++++++++++++++++ packages/api/src/router/parse.ts | 60 -------------------------------- 3 files changed, 54 insertions(+), 62 deletions(-) delete mode 100644 packages/api/src/router/parse.ts diff --git a/packages/api/src/root.ts b/packages/api/src/root.ts index 85e1c3a7..1466be44 100644 --- a/packages/api/src/root.ts +++ b/packages/api/src/root.ts @@ -1,12 +1,10 @@ import { menuRouter } from "./router/menu"; import { postRouter } from "./router/post"; -import { parseRouter } from "./router/parse"; import { createTRPCRouter } from "./trpc"; export const appRouter = createTRPCRouter({ post: postRouter, menu: menuRouter, - parse: parseRouter, }); // export type definition of API diff --git a/packages/api/src/router/menu.ts b/packages/api/src/router/menu.ts index fd396f9c..2d5fc132 100644 --- a/packages/api/src/router/menu.ts +++ b/packages/api/src/router/menu.ts @@ -1,6 +1,54 @@ import axios from "axios"; import { createTRPCRouter, publicProcedure } from "../trpc"; +import { LocationNames } from "../utils/constants"; +import type { CampusDishResponse } from "../../../types/campusdish"; +import type { ParsedResponse, Station } from "../../../types/zotmeal"; + +function parse(data: CampusDishResponse): ParsedResponse { + const uniqueStations = new Set(); + data.Menu.MenuStations.forEach(menuStation => { + uniqueStations.add(JSON.stringify({ + station_id: menuStation.StationId, + restaurant_id: data.LocationId, + name: menuStation.Name, + })) + }); + const stations = Array.from(uniqueStations).map(station => JSON.parse(station) as Station); + const parsed: ParsedResponse = { + restaurant: { + restaurant_id: data.LocationId, + restaurant_name: LocationNames[data.LocationId as keyof typeof LocationNames], + }, + stations, + dishes: data.Menu.MenuProducts.map(menuProduct => ({ + id: menuProduct.Product.ProductId, + station_id: menuProduct.StationId, + name: menuProduct.Product.MarketingName, + description: menuProduct.Product.ShortDescription, + dietary_restriction_info: { + id: menuProduct.Product.ProductId, + contains_eggs: menuProduct.Product.ContainsEggs, + contains_fish: menuProduct.Product.ContainsFish, + contains_milk: menuProduct.Product.ContainsMilk, + contains_peanuts: menuProduct.Product.ContainsPeanuts, + contains_shellfish: menuProduct.Product.ContainsShellfish, + contains_soy: menuProduct.Product.ContainsSoy, + contains_tree_nuts: menuProduct.Product.ContainsTreeNuts, + contains_wheat: menuProduct.Product.ContainsWheat, + contains_sesame: menuProduct.Product.ContainsSesame, + is_gluten_free: menuProduct.Product.IsGlutenFree, + is_halal: menuProduct.Product.IsHalal, + is_kosher: menuProduct.Product.IsKosher, + is_locally_grown: menuProduct.Product.IsLocallyGrown, + is_organic: menuProduct.Product.IsOrganic, + is_vegan: menuProduct.Product.IsVegan, + is_vegetarian: menuProduct.Product.IsVegetarian, + } + })), + } + return parsed; +} export const menuRouter = createTRPCRouter({ hello: publicProcedure.query(async ({ ctx }) => { @@ -10,4 +58,10 @@ export const menuRouter = createTRPCRouter({ const _ = ctx; return "hello"; }), + parse: publicProcedure.query(async ({ ctx }) => { + const res = await axios.get("https://uci.campusdish.com/api/menu/GetMenus?locationId=3314&periodId=49&date=1/19/2024"); + const parsed = parse(res.data); + const _ = ctx; + return parsed; + }), }); diff --git a/packages/api/src/router/parse.ts b/packages/api/src/router/parse.ts deleted file mode 100644 index 4ffe152a..00000000 --- a/packages/api/src/router/parse.ts +++ /dev/null @@ -1,60 +0,0 @@ -import axios from "axios"; - -import { createTRPCRouter, publicProcedure } from "../trpc"; -import { LocationNames } from "../utils/constants"; -import type { CampusDishResponse } from "../../../types/campusdish"; -import type { ParsedResponse, Station } from "../../../types/zotmeal"; - -function parse(data: CampusDishResponse): ParsedResponse { - const uniqueStations = new Set(); - data.Menu.MenuStations.forEach(menuStation => { - uniqueStations.add(JSON.stringify({ - station_id: menuStation.StationId, - restaurant_id: data.LocationId, - name: menuStation.Name, - })) - }); - const stations = Array.from(uniqueStations).map(station => JSON.parse(station) as Station); - const parsed: ParsedResponse = { - restaurant: { - restaurant_id: data.LocationId, - restaurant_name: LocationNames[data.LocationId as keyof typeof LocationNames], - }, - stations, - dishes: data.Menu.MenuProducts.map(menuProduct => ({ - id: menuProduct.Product.ProductId, - station_id: menuProduct.StationId, - name: menuProduct.Product.MarketingName, - description: menuProduct.Product.ShortDescription, - dietary_restriction_info: { - id: menuProduct.Product.ProductId, - contains_eggs: menuProduct.Product.ContainsEggs, - contains_fish: menuProduct.Product.ContainsFish, - contains_milk: menuProduct.Product.ContainsMilk, - contains_peanuts: menuProduct.Product.ContainsPeanuts, - contains_shellfish: menuProduct.Product.ContainsShellfish, - contains_soy: menuProduct.Product.ContainsSoy, - contains_tree_nuts: menuProduct.Product.ContainsTreeNuts, - contains_wheat: menuProduct.Product.ContainsWheat, - contains_sesame: menuProduct.Product.ContainsSesame, - is_gluten_free: menuProduct.Product.IsGlutenFree, - is_halal: menuProduct.Product.IsHalal, - is_kosher: menuProduct.Product.IsKosher, - is_locally_grown: menuProduct.Product.IsLocallyGrown, - is_organic: menuProduct.Product.IsOrganic, - is_vegan: menuProduct.Product.IsVegan, - is_vegetarian: menuProduct.Product.IsVegetarian, - } - })), - } - return parsed; -} - -export const parseRouter = createTRPCRouter({ - parse: publicProcedure.query(async ({ ctx }) => { - const res = await axios.get("https://uci.campusdish.com/api/menu/GetMenus?locationId=3314&periodId=49&date=1/19/2024"); - const parsed = parse(res.data); - const _ = ctx; - return parsed; - }), -});