From d930c3d957fdd10bf5043ea1e950159e804faa8d Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 30 Dec 2024 19:48:20 +0100 Subject: [PATCH] feat: fish dissection (#663) --- src/controllers/api/fishmongerController.ts | 38 +++++++++++++++++++++ src/routes/api.ts | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 src/controllers/api/fishmongerController.ts diff --git a/src/controllers/api/fishmongerController.ts b/src/controllers/api/fishmongerController.ts new file mode 100644 index 00000000..3d572948 --- /dev/null +++ b/src/controllers/api/fishmongerController.ts @@ -0,0 +1,38 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; +import { ExportResources } from "warframe-public-export-plus"; + +export const fishmongerController: RequestHandler = async (req, res) => { + if (!req.query.dissect) { + throw new Error("expected fishmonger request to be for dissection"); + } + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const body = getJSONfromString(String(req.body)) as IFishmongerRequest; + const miscItemChanges: IMiscItem[] = []; + for (const fish of body.Fish) { + for (const part of ExportResources[fish.ItemType].dissectionParts!) { + const partItem = miscItemChanges.find(x => x.ItemType == part.ItemType); + if (partItem) { + partItem.ItemCount += part.ItemCount; + } else { + miscItemChanges.push(part); + } + } + miscItemChanges.push({ ItemType: fish.ItemType, ItemCount: fish.ItemCount * -1 }); + } + addMiscItems(inventory, miscItemChanges); + await inventory.save(); + res.json({ + InventoryChanges: { + MiscItems: miscItemChanges + } + }); +}; + +interface IFishmongerRequest { + Fish: IMiscItem[]; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index d30bd9b5..885aa84b 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -11,6 +11,7 @@ import { dronesController } from "@/src/controllers/api/dronesController"; import { endlessXpController } from "@/src/controllers/api/endlessXpController"; import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController"; import { findSessionsController } from "@/src/controllers/api/findSessionsController"; +import { fishmongerController } from "@/src/controllers/api/fishmongerController"; import { focusController } from "@/src/controllers/api/focusController"; import { fusionTreasuresController } from "@/src/controllers/api/fusionTreasuresController"; import { genericUpdateController } from "@/src/controllers/api/genericUpdateController"; @@ -113,6 +114,7 @@ apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/evolveWeapon.php", evolveWeaponController); apiRouter.post("/findSessions.php", findSessionsController); +apiRouter.post("/fishmonger.php", fishmongerController); apiRouter.post("/focus.php", focusController); apiRouter.post("/fusionTreasures.php", fusionTreasuresController); apiRouter.post("/genericUpdate.php", genericUpdateController);