From 5d8643b1876d5bf34044b81e413631c1018940fa Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 3 Jan 2025 07:16:07 +0100 Subject: [PATCH] chore: add weapon to freestanding inventory --- src/controllers/api/focusController.ts | 7 +++- .../api/modularWeaponCraftingController.ts | 4 +- src/controllers/custom/addItemController.ts | 6 ++- src/services/inventoryService.ts | 37 ++++++++++--------- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/controllers/api/focusController.ts b/src/controllers/api/focusController.ts index 268b53ba..5468d8dd 100644 --- a/src/controllers/api/focusController.ts +++ b/src/controllers/api/focusController.ts @@ -4,6 +4,7 @@ import { getInventory, addMiscItems, addEquipment } from "@/src/services/invento import { IMiscItem, TFocusPolarity, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { ExportFocusUpgrades } from "warframe-public-export-plus"; +import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; export const focusController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -102,8 +103,10 @@ export const focusController: RequestHandler = async (req, res) => { "/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingChassis", "/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingBarrel" ]; - const result = await addEquipment("OperatorAmps", request.StartingWeaponType, accountId, parts); - res.json(result); + const inventory = await getInventory(accountId); + const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, parts); + await inventory.save(); + res.json((inventoryChanges.OperatorAmps as IEquipmentClient[])[0]); break; } case FocusOperation.UnbindUpgrade: { diff --git a/src/controllers/api/modularWeaponCraftingController.ts b/src/controllers/api/modularWeaponCraftingController.ts index 8d2f83d9..3eb27310 100644 --- a/src/controllers/api/modularWeaponCraftingController.ts +++ b/src/controllers/api/modularWeaponCraftingController.ts @@ -34,9 +34,10 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res) throw new Error(`unknown modular weapon type: ${data.WeaponType}`); } const category = modularWeaponTypes[data.WeaponType]; + const inventory = await getInventory(accountId); // Give weapon - const weapon = await addEquipment(category, data.WeaponType, accountId, data.Parts); + const weapon = addEquipment(inventory, category, data.WeaponType, data.Parts); // Remove credits & parts const miscItemChanges = []; @@ -46,7 +47,6 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res) ItemCount: -1 }); } - const inventory = await getInventory(accountId); const currencyChanges = updateCurrency( inventory, category == "Hoverboards" || category == "MoaPets" ? 5000 : 4000, diff --git a/src/controllers/custom/addItemController.ts b/src/controllers/custom/addItemController.ts index f3fad1e0..a045739c 100644 --- a/src/controllers/custom/addItemController.ts +++ b/src/controllers/custom/addItemController.ts @@ -17,9 +17,11 @@ const addItemController: RequestHandler = async (req, res) => { return; } case ItemType.Weapon: { + const inventory = await getInventory(accountId); const weaponType = getWeaponType(request.InternalName); - const weapon = await addEquipment(weaponType, request.InternalName, accountId); - res.json(weapon); + const inventoryChanges = addEquipment(inventory, weaponType, request.InternalName); + await inventory.save(); + res.json(inventoryChanges); break; } default: diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 9e1e7944..46b9a29b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -263,13 +263,15 @@ export const addItem = async ( } break; case "Weapons": { + const inventory = await getInventory(accountId); const weaponType = getWeaponType(typeName); - const weapon = await addEquipment(weaponType, typeName, accountId); + const inventoryChanges = addEquipment(inventory, weaponType, typeName); + await inventory.save(); await updateSlots(accountId, InventorySlot.WEAPONS, 0, 1); return { InventoryChanges: { - WeaponBin: { count: 1, platinum: 0, Slots: -1 }, - [weaponType]: [weapon] + ...inventoryChanges, + WeaponBin: { count: 1, platinum: 0, Slots: -1 } } }; } @@ -562,23 +564,24 @@ export const updateTheme = async (data: IThemeUpdateRequest, accountId: string): await inventory.save(); }; -export const addEquipment = async ( +export const addEquipment = ( + inventory: TInventoryDatabaseDocument, category: TEquipmentKey, type: string, - accountId: string, - modularParts: string[] | undefined = undefined -): Promise => { - const inventory = await getInventory(accountId); + modularParts: string[] | undefined = undefined, + inventoryChanges: IInventoryChanges = {} +): IInventoryChanges => { + const index = + inventory[category].push({ + ItemType: type, + Configs: [], + XP: 0, + ModularParts: modularParts + }) - 1; - const index = inventory[category].push({ - ItemType: type, - Configs: [], - XP: 0, - ModularParts: modularParts - }); - - const changedInventory = await inventory.save(); - return changedInventory[category][index - 1].toJSON() as object as IEquipmentClient; + inventoryChanges[category] ??= []; + (inventoryChanges[category] as IEquipmentClient[]).push(inventory[category][index].toJSON()); + return inventoryChanges; }; export const addCustomization = (