From 01e490768c883184c34d10631ca779fba4cf1f7b Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 17 Jun 2025 05:01:55 -0700 Subject: [PATCH] fix: ensure helminth shard operations don't produce a null shard (#2176) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2176 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/infestedFoundryController.ts | 8 +++++--- src/models/inventoryModels/inventoryModel.ts | 11 +++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index 4cc21061..495b4d8b 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -30,8 +30,9 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { const request = getJSONfromString(String(req.body)); const inventory = await getInventory(account._id.toString()); const suit = inventory.Suits.id(request.SuitId.$oid)!; - if (!suit.ArchonCrystalUpgrades || suit.ArchonCrystalUpgrades.length != 5) { - suit.ArchonCrystalUpgrades = [{}, {}, {}, {}, {}]; + suit.ArchonCrystalUpgrades ??= []; + while (suit.ArchonCrystalUpgrades.length < request.Slot) { + suit.ArchonCrystalUpgrades.push({}); } suit.ArchonCrystalUpgrades[request.Slot] = { UpgradeType: request.UpgradeType, @@ -92,7 +93,8 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { } // remove from suit - suit.ArchonCrystalUpgrades![request.Slot] = {}; + suit.ArchonCrystalUpgrades![request.Slot].UpgradeType = undefined; + suit.ArchonCrystalUpgrades![request.Slot].Color = undefined; await inventory.save(); diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 2e4008dd..a9335fa7 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -251,12 +251,6 @@ const ArchonCrystalUpgradeSchema = new Schema( { _id: false } ); -ArchonCrystalUpgradeSchema.set("toJSON", { - transform(_document, returnedObject) { - delete returnedObject.__v; - } -}); - const boosterSchema = new Schema( { ExpiryDate: Number, @@ -1079,6 +1073,11 @@ EquipmentSchema.set("toJSON", { if (db.UmbraDate) { client.UmbraDate = toMongoDate(db.UmbraDate); } + + if (client.ArchonCrystalUpgrades) { + // For some reason, mongoose turns empty objects here into nulls, so we have to fix it. + client.ArchonCrystalUpgrades = client.ArchonCrystalUpgrades.map(x => (x as unknown) ?? {}); + } } });