From 852fdcfc0e952551187f177b1f79efbbed978da2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Wed, 8 May 2024 22:53:06 +0200 Subject: [PATCH] feat: implement XPInfo (#200) --- src/controllers/stats/viewController.ts | 20 +++++++++++++++++++- src/services/inventoryService.ts | 23 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/controllers/stats/viewController.ts b/src/controllers/stats/viewController.ts index 82282611..c73eac38 100644 --- a/src/controllers/stats/viewController.ts +++ b/src/controllers/stats/viewController.ts @@ -1,11 +1,29 @@ import { RequestHandler } from "express"; +import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { IStatsView } from "@/src/types/statTypes"; import config from "@/config.json"; import view from "@/static/fixed_responses/view.json"; import allScans from "@/static/fixed_responses/allScans.json"; -const viewController: RequestHandler = (_req, res) => { +const viewController: RequestHandler = async (req, res) => { + if (!req.query.accountId) { + res.status(400).json({ error: "accountId was not provided" }); + return; + } + const inventory = await Inventory.findOne({ accountOwnerId: req.query.accountId }); + if (!inventory) { + res.status(400).json({ error: "inventory was undefined" }); + return; + } + const responseJson: IStatsView = view; + responseJson.Weapons = []; + for (const item of inventory.XPInfo) { + responseJson.Weapons.push({ + type: item.ItemType, + xp: item.XP + }); + } if (config.unlockAllScans) { responseJson.Scans = allScans; } diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index d199ccb4..4f3acc31 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -201,12 +201,27 @@ const addGearExpByCategory = ( const category = inventory[categoryName]; gearArray?.forEach(({ ItemId, XP }) => { - const itemIndex = ItemId ? category.findIndex(item => item._id?.equals(ItemId.$oid)) : -1; - const item = category[itemIndex]; + if (!XP) { + return; + } - if (itemIndex !== -1 && item.XP != undefined) { - item.XP += XP || 0; + const itemIndex = ItemId ? category.findIndex(item => item._id?.equals(ItemId.$oid)) : -1; + if (itemIndex !== -1) { + const item = category[itemIndex]; + item.XP ??= 0; + item.XP += XP; inventory.markModified(`${categoryName}.${itemIndex}.XP`); + + const xpinfoIndex = inventory.XPInfo.findIndex(x => x.ItemType == item.ItemType); + if (xpinfoIndex !== -1) { + const xpinfo = inventory.XPInfo[xpinfoIndex]; + xpinfo.XP += XP; + } else { + inventory.XPInfo.push({ + ItemType: item.ItemType, + XP: XP + }); + } } }); };