From 647fd85bab62f4cd8a961576e82d5ee736fc5a8d Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:21:03 +0100 Subject: [PATCH] cleanup a bit --- src/controllers/api/saveLoadout.ts | 2 +- src/services/saveLoadoutService.ts | 82 +++++++++--------------------- 2 files changed, 25 insertions(+), 59 deletions(-) diff --git a/src/controllers/api/saveLoadout.ts b/src/controllers/api/saveLoadout.ts index d520c8d0..9a973699 100644 --- a/src/controllers/api/saveLoadout.ts +++ b/src/controllers/api/saveLoadout.ts @@ -17,7 +17,7 @@ const saveLoadoutController: RequestHandler = async (req, res) => { const { UpgradeVer, ...equipmentChanges } = body; await handleInventoryItemConfigChange(equipmentChanges, accountId); } catch (error) { - res.status(200).end(); + res.status(400).json({ error: error.message }); } }; diff --git a/src/services/saveLoadoutService.ts b/src/services/saveLoadoutService.ts index 8d690e62..43006cc9 100644 --- a/src/services/saveLoadoutService.ts +++ b/src/services/saveLoadoutService.ts @@ -13,16 +13,14 @@ export const isEmptyObject = (obj: unknown): boolean => { return Boolean(obj && Object.keys(obj).length === 0 && obj.constructor === Object); }; -//setup default items on account creation or like originally in giveStartingItems.php +//TODO: setup default items on account creation or like originally in giveStartingItems.php -//TODO: avoid multiple saves for less db calls -//TODO: change update functions to only add and not save +//TODO: change update functions to only add and not save perhaps, functions that add and return inventory perhaps /* loadouts has loadoutconfigs operatorloadouts has itemconfig, but no multiple config ids itemconfig has multiple config ids */ - export const handleInventoryItemConfigChange = async ( equipmentChanges: ISaveLoadoutRequestNoUpgradeVer, accountId: string @@ -37,14 +35,12 @@ export const handleInventoryItemConfigChange = async ( continue; } // non-empty is a change in loadout(or suit...) - switch (equipmentName) { case "OperatorLoadOuts": case "AdultOperatorLoadOuts": { - const inventory = await getInventory(accountId); const operatorConfig = equipment as IOperatorConfigEntry; const operatorLoadout = inventory[equipmentName]; - console.log("loadout received", equipmentName, operatorConfig); + //console.log("loadout received", equipmentName, operatorConfig); // all non-empty entries are one loadout slot for (const [loadoutId, loadoutConfig] of Object.entries(operatorConfig)) { // console.log("loadoutId", loadoutId, "loadoutconfig", loadoutConfig); @@ -57,42 +53,30 @@ export const handleInventoryItemConfigChange = async ( _id: ItemId.$oid, ...loadoutConfigItemIdRemoved }); - await inventory.save(); continue; } loadout.set(loadoutConfig); - - //({ _id: loadoutId }, loadoutConfig); } - await inventory.save(); break; } case "LoadOuts": { - console.log("loadout received"); + //console.log("loadout received"); + const loadout = await LoadoutModel.findOne({ loadoutOwnerId: accountId }); + if (!loadout) { + throw new Error("loadout not found"); + } for (const [_loadoutSlot, _loadout] of Object.entries(equipment)) { const loadoutSlot = _loadoutSlot as keyof ILoadoutClient; const newLoadout = _loadout as ILoadoutEntry; - //console.log("key", loadoutSlot, "value", loadout); - // empty loadout slot like: "NORMAL": {} if (isEmptyObject(newLoadout)) { continue; } - const loadout = await LoadoutModel.findOne({ loadoutOwnerId: accountId }); - //const {, ...loadout } = loadoutWithLoadoutOwnerId; - - if (!loadout) { - throw new Error("loadout not found"); - } // all non-empty entries are one loadout slot for (const [loadoutId, loadoutConfig] of Object.entries(newLoadout)) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - //const { loadoutOwnerId, ...loadout } = loadoutWithLoadoutOwnerId; - // console.log("loadoutId", loadoutId, "loadoutconfig", loadoutConfig); - const oldLoadoutConfig = loadout[loadoutSlot].find( loadout => loadout._id.toString() === loadoutId ); @@ -104,25 +88,19 @@ export const handleInventoryItemConfigChange = async ( _id: ItemId.$oid, ...loadoutConfigItemIdRemoved }); - await loadout.save(); continue; } const loadoutIndex = loadout[loadoutSlot].indexOf(oldLoadoutConfig); - if (loadoutIndex === undefined || loadoutIndex === -1) { throw new Error("loadout index not found"); } - //console.log("parent id", oldLoadoutConfig.ownerDocument()._id); + //perhaps .overwrite() is better loadout[loadoutSlot][loadoutIndex].set(loadoutConfig); - //loadout.NORMAL[loadoutIndex].overwrite(loadoutConfig); - //console.log("db", loadout[loadoutSlot][loadoutIndex].schema); - - await loadout.save(); - //({ _id: loadoutId }, loadoutConfig); } } + await loadout.save(); break; } case "LongGuns": @@ -134,10 +112,9 @@ export const handleInventoryItemConfigChange = async ( case "DrifterMelee": case "Sentinels": case "Horses": { - console.log("? ???? ?", equipmentName, equipment); + //console.log("general Item config saved", equipmentName, equipment); const itemEntries = equipment as IItemEntry; - const inventory = await getInventory(accountId); for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) { const inventoryItem = inventory[equipmentName].find(item => item._id?.toString() === itemId); @@ -150,15 +127,11 @@ export const handleInventoryItemConfigChange = async ( inventoryItem.Configs[parseInt(configId)] = config; } } - await inventory.save(); break; } case "CurrentLoadOutIds": { - //TODO: remove duplicate getInventory after finding out when currentloadOutId is sent const loadoutIds = equipment as IOid[]; // TODO: Check for more than just an array of oids, I think i remember one instance - const inventory = await getInventory(accountId); inventory.CurrentLoadOutIds = loadoutIds; - await inventory.save(); break; } case "EquippedGear": { @@ -168,27 +141,20 @@ export const handleInventoryItemConfigChange = async ( default: { console.log("category not implemented", equipmentName, equipment); } + //case "OperatorAmps": + // case "SentinelWeapons": + // case "KubrowPets": + // case "SpaceSuits": + // case "SpaceGuns": + // case "SpaceMelee": + // case "SpecialItems": + // case "MoaPets": + // case "Hoverboards": + // case "MechSuits": + // case "CrewShipHarnesses": + // case "CrewShips": + //case "KahlLoadOuts": not sure yet how to handle kahl: it is not sent in inventory } - - //case "OperatorAmps": - - // case "SentinelWeapons": - // case "KubrowPets": - // case "SpaceSuits": - // case "SpaceGuns": - // case "SpaceMelee": - - // case "SpecialItems": - // case "MoaPets": - // case "Hoverboards": - - // case "MechSuits": - // case "CrewShipHarnesses": - - // - - // case "CrewShips": - //case "KahlLoadOuts": not sure yet how to handle kahl: it is not sent in inventory } await inventory.save(); };