Mod upgrade - take 2

This commit is contained in:
holmityd 2023-09-02 13:43:17 +04:00
parent 20658043dd
commit 0309e182c2
4 changed files with 38 additions and 19 deletions

View File

@ -13,8 +13,8 @@ const artifactsController: RequestHandler = async (req, res) => {
const parsedData = JSON.parse(data); const parsedData = JSON.parse(data);
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
await upgradeMod(parsedData, id); const upgradeModId = await upgradeMod(parsedData, id);
res.json({}); res.send(upgradeModId);
} catch (err) { } catch (err) {
console.error("Error parsing JSON data:", err); console.error("Error parsing JSON data:", err);
} }

View File

@ -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 { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase, Booster } from "../types/inventoryTypes/inventoryTypes";
import { Oid } from "../types/commonTypes"; import { Oid } from "../types/commonTypes";
import { ISuitDatabase } from "@/src/types/inventoryTypes/SuitTypes"; import { ISuitDatabase } from "@/src/types/inventoryTypes/SuitTypes";
@ -75,7 +75,13 @@ const RawUpgrades = new Schema({
ItemType: String, ItemType: String,
UpgradeFingerprint: String, UpgradeFingerprint: String,
PendingRerollFingerprint: String, PendingRerollFingerprint: String,
ItemCount: Number ItemCount: Number,
ItemId: {
$oid: mongoose.Schema.Types.ObjectId
},
LastAdded: {
$oid: mongoose.Schema.Types.ObjectId
}
}); });
RawUpgrades.set("toJSON", { RawUpgrades.set("toJSON", {

View File

@ -150,14 +150,16 @@ const addMods = (inventory: IInventoryDatabaseDocument, itemsArray: RawUpgrade[]
const { RawUpgrades } = inventory; const { RawUpgrades } = inventory;
itemsArray?.forEach(({ ItemType, ItemCount, UpgradeFingerprint }) => { itemsArray?.forEach(({ ItemType, ItemCount, UpgradeFingerprint }) => {
const itemIndex = RawUpgrades.findIndex( const itemIndex = RawUpgrades.findIndex(
i => i.ItemType === ItemType && i.UpgradeFingerprint === UpgradeFingerprint i =>
i.ItemType === ItemType &&
(i.UpgradeFingerprint === UpgradeFingerprint || (!i.UpgradeFingerprint && !UpgradeFingerprint))
); );
if (itemIndex !== -1) { if (itemIndex !== -1) {
RawUpgrades[itemIndex].ItemCount += ItemCount; RawUpgrades[itemIndex].ItemCount += ItemCount;
inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`); inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`);
} else { } else {
RawUpgrades.push({ ItemCount, ItemType }); RawUpgrades.push({ ItemCount, ItemType, UpgradeFingerprint });
} }
}); });
}; };
@ -228,36 +230,46 @@ export const upgradeMod = async (
FusionPointCost FusionPointCost
}: { Upgrade: RawUpgrade; LevelDiff: number; Cost: number; FusionPointCost: number }, }: { Upgrade: RawUpgrade; LevelDiff: number; Cost: number; FusionPointCost: number },
accountId: string accountId: string
): Promise<void> => { ): Promise<string | undefined> => {
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const { RawUpgrades } = inventory; const { RawUpgrades } = inventory;
const { ItemCount, ItemType, UpgradeFingerprint } = Upgrade; const { ItemCount, ItemType, UpgradeFingerprint } = Upgrade;
const itemIndex = RawUpgrades.findIndex( 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}'; const safeUpgradeFingerprint = UpgradeFingerprint || '{"lvl":0}';
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint); const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint);
parsedUpgradeFingerprint.lvl += LevelDiff; 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) { // RawUpgrades[itemIndex].ItemCount--;
inventory.markModified(`RawUpgrades.${itemIndex}.ItemCount`);
} else {
RawUpgrades.splice(itemIndex, 1);
inventory.markModified(`RawUpgrades`);
}
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.RegularCredits -= Cost;
inventory.FusionPoints -= FusionPointCost; 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": { // "Upgrade": {
// ItemType: "/Lotus/Upgrades/Mods/Warframe/Beginner/AvatarShieldMaxModBeginner", // ItemType: "/Lotus/Upgrades/Mods/Warframe/Beginner/AvatarShieldMaxModBeginner",

View File

@ -925,9 +925,10 @@ export interface Progress {
export interface RawUpgrade { export interface RawUpgrade {
ItemType: string; ItemType: string;
ItemCount: number; ItemCount: number;
ItemId?: Oid;
LastAdded?: Oid;
UpgradeFingerprint?: string; UpgradeFingerprint?: string;
PendingRerollFingerprint?: string; PendingRerollFingerprint?: string;
LastAdded?: Oid;
} }
export interface Scoop { export interface Scoop {