From dff85de6916d0072622db4aca28cc6940bfb9f5e Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 9 May 2024 12:35:43 +0200 Subject: [PATCH] feat: implement purchasing of additional mod slots --- src/controllers/api/upgradesController.ts | 37 +++++++++++++++++----- src/types/inventoryTypes/inventoryTypes.ts | 1 + 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index 5d4b134c..efd33917 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -2,19 +2,25 @@ import { RequestHandler } from "express"; import { IUpgradesRequest } from "@/src/types/requestTypes"; import { IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IGenericItemDatabase, IMiscItem, TGenericItemKey } from "@/src/types/inventoryTypes/inventoryTypes"; -import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; export const upgradesController: RequestHandler = async (req, res) => { const accountId = req.query.accountId as string; const payload = JSON.parse(req.body.toString()) as IUpgradesRequest; const inventory = await getInventory(accountId); + const InventoryChanges: any = {}; for (const operation of payload.Operations) { - addMiscItems(inventory, [ - { - ItemType: operation.UpgradeRequirement, - ItemCount: -1 - } satisfies IMiscItem - ]); + if (operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/ModSlotUnlocker") { + updateCurrency(10, true, accountId); + } else { + addMiscItems(inventory, [ + { + ItemType: operation.UpgradeRequirement, + ItemCount: -1 + } satisfies IMiscItem + ]); + } + switch (operation.UpgradeRequirement) { case "/Lotus/Types/Items/MiscItems/OrokinReactor": case "/Lotus/Types/Items/MiscItems/OrokinCatalyst": @@ -62,10 +68,25 @@ export const upgradesController: RequestHandler = async (req, res) => { } } break; + case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker": + for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { + if (item._id.toString() == payload.ItemId.$oid) { + item.ModSlotPurchases ??= 0; + item.ModSlotPurchases += 1; + InventoryChanges[payload.ItemCategory] = { + ItemId: { + $oid: payload.ItemId.$oid + }, + ModSlotPurchases: item.ModSlotPurchases + }; + break; + } + } + break; default: throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement); } } await inventory.save(); - res.end(); + res.json({ InventoryChanges }); }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 66d27010..6d9ce1ca 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -94,6 +94,7 @@ export interface IGenericItem { Features?: number; Polarity?: IPolarity[]; Polarized?: number; + ModSlotPurchases?: number; } export interface IGenericItemDatabase extends Omit {