diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 078532dc..bada9ab7 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -28,6 +28,7 @@ const inventoryController: RequestHandler = async (request: Request, response: R if (config.testMission) inventoryResponse.Missions = testMissions; if (config.testQuestKey) inventoryResponse.QuestKeys = testQuestKeys; + inventoryResponse.DuviriInfo = { Seed: -5049874987509758080, NumCompletions: 0 }; response.json(inventoryResponse); }; diff --git a/src/controllers/api/saveLoadout.ts b/src/controllers/api/saveLoadout.ts index b83ad6b1..ec44ce4e 100644 --- a/src/controllers/api/saveLoadout.ts +++ b/src/controllers/api/saveLoadout.ts @@ -1,13 +1,57 @@ import { Inventory } from "@/src/models/inventoryModel"; import { RequestHandler } from "express"; import util from "util"; +import { EquipmentCategories, ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes"; +import { isObject } from "@/src/helpers/general"; +import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; + +export const isObjectEmpty = (obj: Record) => { + return obj && Object.keys(obj).length === 0 && obj.constructor === Object; +}; + +export const handleInventoryItemConfigChange = (equipmentChanges: ISaveLoadoutRequest) => { + for (const [equipmentName, equipment] of Object.entries(equipmentChanges)) { + //console.log(equipmentName); + if (!isObjectEmpty(equipment)) { + // non-empty is a change in loadout(or suit...) + + switch (equipmentName) { + case "LoadOuts": { + console.log("loadout received"); + for (const [loadoutName, loadout] of Object.entries(equipment)) { + console.log(loadoutName, loadout); + //if (!isObjectEmpty(loadout)) + } + break; + } + default: + console.log("category not implemented", equipmentName); + } + // Object.keys(value).forEach(element => { + // console.log("name of inner objects keys", element); + // }); + // for (const innerValue of Object.values(value)) { + // console.log(innerValue); + // } + } + + // console.log(innerObjects); + // if (isObjectEmpty(innerObjects)) { + // console.log(innerObjects, "is empty"); + // } + } +}; // eslint-disable-next-line @typescript-eslint/no-misused-promises const saveLoadoutController: RequestHandler = async (req, res) => { - const body = JSON.parse(req.body); - console.log(util.inspect(body, { showHidden: false, depth: null, colors: true })); + //validate here + const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest; + // console.log(util.inspect(body, { showHidden: false, depth: null, colors: true })); - res.sendStatus(200); + const { UpgradeVer, ...equipmentChanges } = body; + handleInventoryItemConfigChange(body); + + res.status(200).end(); }; export { saveLoadoutController }; diff --git a/src/helpers/general.ts b/src/helpers/general.ts index 8aa19a1a..cc13e4ec 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -55,4 +55,12 @@ const parseBoolean = (booleanCandidate: unknown): boolean => { return booleanCandidate; }; +export const isObject = (objectCandidate: unknown): objectCandidate is Record => { + return ( + (typeof objectCandidate === "object" || objectCandidate instanceof Object) && + objectCandidate !== null && + !Array.isArray(objectCandidate) + ); +}; + export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail }; diff --git a/src/types/inventoryTypes/SuitTypes.ts b/src/types/inventoryTypes/SuitTypes.ts index 7e1f6825..dc71db19 100644 --- a/src/types/inventoryTypes/SuitTypes.ts +++ b/src/types/inventoryTypes/SuitTypes.ts @@ -9,6 +9,7 @@ export interface ISuitDocument extends Document, ISuitResponse { export interface ISuitResponse extends ISuitDatabase { ItemId: IOid; + //should omit _id which is not present in response } export interface ISuitDatabase { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 760b8659..450b6e10 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -14,6 +14,7 @@ export interface IInventoryDatabase extends Omit