Skip to content

Commit

Permalink
refactor: move parse function to its own file
Browse files Browse the repository at this point in the history
  • Loading branch information
dlustre committed Feb 3, 2024
1 parent 6f0f817 commit 423192c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 47 deletions.
48 changes: 1 addition & 47 deletions packages/api/src/router/menu.ts
Original file line number Diff line number Diff line change
@@ -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<string>();
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 }) => {
Expand Down
48 changes: 48 additions & 0 deletions packages/api/src/utils/parse.ts
Original file line number Diff line number Diff line change
@@ -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<string>();
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;
}

0 comments on commit 423192c

Please sign in to comment.