Mod upgrade - take 2
This commit is contained in:
		
							parent
							
								
									20658043dd
								
							
						
					
					
						commit
						0309e182c2
					
				@ -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);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -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", {
 | 
				
			||||||
 | 
				
			|||||||
@ -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",
 | 
				
			||||||
 | 
				
			|||||||
@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user