diff --git a/src/controllers/api/artifactsController.ts b/src/controllers/api/artifactsController.ts index bb69d486..93aa47af 100644 --- a/src/controllers/api/artifactsController.ts +++ b/src/controllers/api/artifactsController.ts @@ -13,8 +13,8 @@ const artifactsController: RequestHandler = async (req, res) => { const parsedData = JSON.parse(data); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - await upgradeMod(parsedData, id); - res.json({}); + const upgradeModId = await upgradeMod(parsedData, id); + res.send(upgradeModId); } catch (err) { console.error("Error parsing JSON data:", err); } diff --git a/src/models/inventoryModel.ts b/src/models/inventoryModel.ts index 504bfaaf..d96f22bc 100644 --- a/src/models/inventoryModel.ts +++ b/src/models/inventoryModel.ts @@ -1,4 +1,4 @@ -import { Model, Schema, Types, model } from "mongoose"; +import mongoose, { Model, Schema, Types, model } from "mongoose"; import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase, Booster } from "../types/inventoryTypes/inventoryTypes"; import { Oid } from "../types/commonTypes"; import { ISuitDatabase } from "@/src/types/inventoryTypes/SuitTypes"; @@ -75,7 +75,13 @@ const RawUpgrades = new Schema({ ItemType: String, UpgradeFingerprint: String, PendingRerollFingerprint: String, - ItemCount: Number + ItemCount: Number, + ItemId: { + $oid: mongoose.Schema.Types.ObjectId + }, + LastAdded: { + $oid: mongoose.Schema.Types.ObjectId + } }); RawUpgrades.set("toJSON", { diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 9741711a..30d14555 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -150,14 +150,16 @@ const addMods = (inventory: IInventoryDatabaseDocument, itemsArray: RawUpgrade[] const { RawUpgrades } = inventory; itemsArray?.forEach(({ ItemType, ItemCount, UpgradeFingerprint }) => { const itemIndex = RawUpgrades.findIndex( - i => i.ItemType === ItemType && i.UpgradeFingerprint === UpgradeFingerprint + i => + i.ItemType === ItemType && + (i.UpgradeFingerprint === UpgradeFingerprint || (!i.UpgradeFingerprint && !UpgradeFingerprint)) ); if (itemIndex !== -1) { RawUpgrades[itemIndex].ItemCount += ItemCount; inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`); } else { - RawUpgrades.push({ ItemCount, ItemType }); + RawUpgrades.push({ ItemCount, ItemType, UpgradeFingerprint }); } }); }; @@ -228,36 +230,46 @@ export const upgradeMod = async ( FusionPointCost }: { Upgrade: RawUpgrade; LevelDiff: number; Cost: number; FusionPointCost: number }, accountId: string -): Promise => { +): Promise => { const inventory = await getInventory(accountId); const { RawUpgrades } = inventory; const { ItemCount, ItemType, UpgradeFingerprint } = Upgrade; const itemIndex = RawUpgrades.findIndex( - i => i.ItemType === ItemType && i.UpgradeFingerprint === UpgradeFingerprint + i => + i.ItemType === ItemType && + (i.UpgradeFingerprint === UpgradeFingerprint || (!i.UpgradeFingerprint && !UpgradeFingerprint)) ); + console.log(itemIndex, ItemType, UpgradeFingerprint); + const safeUpgradeFingerprint = UpgradeFingerprint || '{"lvl":0}'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint); parsedUpgradeFingerprint.lvl += LevelDiff; - if (!ItemCount) return; + if (!ItemCount || itemIndex === -1) return; - RawUpgrades[itemIndex].ItemCount--; + RawUpgrades[itemIndex].UpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint); - if (RawUpgrades[itemIndex].ItemCount > 0) { - inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`); - } else { - RawUpgrades.splice(itemIndex, 1); - inventory.markModified(`RawUpgrades`); - } + // RawUpgrades[itemIndex].ItemCount--; - addMods(inventory, [{ ItemType, ItemCount: 1, UpgradeFingerprint: JSON.stringify(parsedUpgradeFingerprint) }]); + // if (RawUpgrades[itemIndex].ItemCount > 0) { + // inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`); + // } else { + // RawUpgrades.splice(itemIndex, 1); + // inventory.markModified(`RawUpgrades`); + // } + + // addMods(inventory, [{ ItemType, ItemCount: 1, UpgradeFingerprint: JSON.stringify(parsedUpgradeFingerprint) }]); inventory.RegularCredits -= Cost; inventory.FusionPoints -= FusionPointCost; - await inventory.save(); + const changedInventory = await inventory.save(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return changedInventory.RawUpgrades[itemIndex]?.toJSON().ItemId.$oid; + + // await inventory.save(); // { // "Upgrade": { // ItemType: "/Lotus/Upgrades/Mods/Warframe/Beginner/AvatarShieldMaxModBeginner", diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 36ffbdbd..6991e7d9 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -925,9 +925,10 @@ export interface Progress { export interface RawUpgrade { ItemType: string; ItemCount: number; + ItemId?: Oid; + LastAdded?: Oid; UpgradeFingerprint?: string; PendingRerollFingerprint?: string; - LastAdded?: Oid; } export interface Scoop {