From d747063213ea9df1e04a4a2dad245469bade7139 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 12 Jan 2025 08:58:47 +0100 Subject: [PATCH] feat: support multiple warframes/weapons being given in the same request --- src/controllers/custom/addItemController.ts | 33 -------------- src/controllers/custom/addItemsController.ts | 33 ++++++++++++++ src/helpers/customHelpers/addItemHelpers.ts | 46 -------------------- src/routes/custom.ts | 4 +- static/webui/script.js | 24 +++++----- 5 files changed, 49 insertions(+), 91 deletions(-) delete mode 100644 src/controllers/custom/addItemController.ts create mode 100644 src/controllers/custom/addItemsController.ts delete mode 100644 src/helpers/customHelpers/addItemHelpers.ts diff --git a/src/controllers/custom/addItemController.ts b/src/controllers/custom/addItemController.ts deleted file mode 100644 index a045739c..00000000 --- a/src/controllers/custom/addItemController.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { getAccountIdForRequest } from "@/src/services/loginService"; -import { ItemType, toAddItemRequest } from "@/src/helpers/customHelpers/addItemHelpers"; -import { getWeaponType } from "@/src/services/itemDataService"; -import { addPowerSuit, addEquipment, getInventory } from "@/src/services/inventoryService"; -import { RequestHandler } from "express"; - -const addItemController: RequestHandler = async (req, res) => { - const accountId = await getAccountIdForRequest(req); - const request = toAddItemRequest(req.body); - - switch (request.type) { - case ItemType.Powersuit: { - const inventory = await getInventory(accountId); - const inventoryChanges = addPowerSuit(inventory, request.InternalName); - await inventory.save(); - res.json(inventoryChanges); - return; - } - case ItemType.Weapon: { - const inventory = await getInventory(accountId); - const weaponType = getWeaponType(request.InternalName); - const inventoryChanges = addEquipment(inventory, weaponType, request.InternalName); - await inventory.save(); - res.json(inventoryChanges); - break; - } - default: - res.status(400).json({ error: "something went wrong" }); - break; - } -}; - -export { addItemController }; diff --git a/src/controllers/custom/addItemsController.ts b/src/controllers/custom/addItemsController.ts new file mode 100644 index 00000000..bc033174 --- /dev/null +++ b/src/controllers/custom/addItemsController.ts @@ -0,0 +1,33 @@ +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getWeaponType } from "@/src/services/itemDataService"; +import { addPowerSuit, addEquipment, getInventory } from "@/src/services/inventoryService"; +import { RequestHandler } from "express"; + +export const addItemsController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const requests = req.body as IAddItemRequest[]; + const inventory = await getInventory(accountId); + for (const request of requests) { + switch (request.type) { + case ItemType.Powersuit: + addPowerSuit(inventory, request.internalName); + break; + + case ItemType.Weapon: + addEquipment(inventory, getWeaponType(request.internalName), request.internalName); + break; + } + } + await inventory.save(); + res.end(); +}; + +enum ItemType { + Powersuit = "Powersuit", + Weapon = "Weapon" +} + +interface IAddItemRequest { + type: ItemType; + internalName: string; +} diff --git a/src/helpers/customHelpers/addItemHelpers.ts b/src/helpers/customHelpers/addItemHelpers.ts deleted file mode 100644 index 5ce2378f..00000000 --- a/src/helpers/customHelpers/addItemHelpers.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { isString } from "@/src/helpers/general"; - -export enum ItemType { - Powersuit = "Powersuit", - Weapon = "Weapon" -} - -export const isItemType = (itemType: string): itemType is ItemType => { - return Object.keys(ItemType).includes(itemType); -}; - -const parseItemType = (itemType: unknown): ItemType => { - if (!itemType || !isString(itemType) || !isItemType(itemType)) { - throw new Error("incorrect item type"); - } - - return itemType; -}; - -interface IAddItemRequest { - type: ItemType; - InternalName: string; -} - -const parseInternalItemName = (internalName: unknown): string => { - if (!isString(internalName)) { - throw new Error("incorrect internal name"); - } - - return internalName; -}; - -export const toAddItemRequest = (body: unknown): IAddItemRequest => { - if (!body || typeof body !== "object") { - throw new Error("incorrect or missing add item request data"); - } - - if ("type" in body && "internalName" in body) { - return { - type: parseItemType(body.type), - InternalName: parseInternalItemName(body.internalName) - }; - } - - throw new Error("malformed add item request"); -}; diff --git a/src/routes/custom.ts b/src/routes/custom.ts index c8f87a56..e4299412 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -8,7 +8,7 @@ import { deleteAccountController } from "@/src/controllers/custom/deleteAccountC import { renameAccountController } from "@/src/controllers/custom/renameAccountController"; import { createAccountController } from "@/src/controllers/custom/createAccountController"; -import { addItemController } from "@/src/controllers/custom/addItemController"; +import { addItemsController } from "@/src/controllers/custom/addItemsController"; import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController"; import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController"; @@ -23,7 +23,7 @@ customRouter.get("/deleteAccount", deleteAccountController); customRouter.get("/renameAccount", renameAccountController); customRouter.post("/createAccount", createAccountController); -customRouter.post("/addItem", addItemController); +customRouter.post("/addItems", addItemsController); customRouter.get("/config", getConfigDataController); customRouter.post("/config", updateConfigDataController); diff --git a/static/webui/script.js b/static/webui/script.js index b0fa52c6..67aba6d6 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -524,12 +524,14 @@ function doAcquireWarframe() { } revalidateAuthz(() => { const req = $.post({ - url: "/custom/addItem?" + window.authz, + url: "/custom/addItems?" + window.authz, contentType: "application/json", - data: JSON.stringify({ - type: "Powersuit", - internalName: uniqueName - }) + data: JSON.stringify([ + { + type: "Powersuit", + internalName: uniqueName + } + ]) }); req.done(() => { document.getElementById("warframe-to-acquire").value = ""; @@ -550,12 +552,14 @@ function doAcquireWeapon() { } revalidateAuthz(() => { const req = $.post({ - url: "/custom/addItem?" + window.authz, + url: "/custom/addItems?" + window.authz, contentType: "application/json", - data: JSON.stringify({ - type: "Weapon", - internalName: uniqueName - }) + data: JSON.stringify([ + { + type: "Weapon", + internalName: uniqueName + } + ]) }); req.done(() => { document.getElementById("weapon-to-acquire").value = "";