From 423192ce0513be5de0d3d4a280713161be0bc7a3 Mon Sep 17 00:00:00 2001 From: Dennis Lustre Date: Fri, 2 Feb 2024 17:48:04 -0800 Subject: [PATCH] refactor: move parse function to its own file --- packages/api/src/router/menu.ts | 48 +-------------------------------- packages/api/src/utils/parse.ts | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 47 deletions(-) create mode 100644 packages/api/src/utils/parse.ts diff --git a/packages/api/src/router/menu.ts b/packages/api/src/router/menu.ts index 2d5fc132..c647c2d6 100644 --- a/packages/api/src/router/menu.ts +++ b/packages/api/src/router/menu.ts @@ -1,54 +1,8 @@ import axios from "axios"; import { createTRPCRouter, publicProcedure } from "../trpc"; -import { LocationNames } from "../utils/constants"; +import { parse } from "../utils/parse"; 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 }) => { diff --git a/packages/api/src/utils/parse.ts b/packages/api/src/utils/parse.ts new file mode 100644 index 00000000..476ed91b --- /dev/null +++ b/packages/api/src/utils/parse.ts @@ -0,0 +1,48 @@ +import { LocationNames } from "../utils/constants"; +import type { CampusDishResponse } from "../../../types/campusdish"; +import type { ParsedResponse, Station } from "../../../types/zotmeal"; + +export 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; +} \ No newline at end of file