typescript hates me
This commit is contained in:
parent
125d03d03a
commit
e7245bbb68
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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<string, unknown>) => {
|
||||
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 };
|
||||
|
@ -55,4 +55,12 @@ const parseBoolean = (booleanCandidate: unknown): boolean => {
|
||||
return booleanCandidate;
|
||||
};
|
||||
|
||||
export const isObject = (objectCandidate: unknown): objectCandidate is Record<string, unknown> => {
|
||||
return (
|
||||
(typeof objectCandidate === "object" || objectCandidate instanceof Object) &&
|
||||
objectCandidate !== null &&
|
||||
!Array.isArray(objectCandidate)
|
||||
);
|
||||
};
|
||||
|
||||
export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail };
|
||||
|
@ -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 {
|
||||
|
@ -14,6 +14,7 @@ export interface IInventoryDatabase extends Omit<IInventoryResponse, "TrainingDa
|
||||
export interface IInventoryResponseDocument extends IInventoryResponse, Document {}
|
||||
|
||||
export interface IInventoryResponse {
|
||||
DuviriInfo: { Seed: number; NumCompletions: number };
|
||||
SubscribedToEmails: number;
|
||||
Created: IMongoDate;
|
||||
RewardSeed: number;
|
||||
|
114
src/types/saveLoadoutTypes.ts
Normal file
114
src/types/saveLoadoutTypes.ts
Normal file
@ -0,0 +1,114 @@
|
||||
export interface ISaveLoadoutRequest {
|
||||
LoadOuts: { [key: string]: LoadOut };
|
||||
LongGuns: { [key: string]: Config };
|
||||
OperatorAmps: { [key: string]: Config };
|
||||
Pistols: { [key: string]: Config };
|
||||
Suits: { [key: string]: Config };
|
||||
Melee: {};
|
||||
Sentinels: {};
|
||||
SentinelWeapons: {};
|
||||
KubrowPets: {};
|
||||
SpaceSuits: {};
|
||||
SpaceGuns: {};
|
||||
SpaceMelee: {};
|
||||
Scoops: {};
|
||||
SpecialItems: {};
|
||||
MoaPets: {};
|
||||
Hoverboards: {};
|
||||
DataKnives: {};
|
||||
MechSuits: {};
|
||||
CrewShipHarnesses: {};
|
||||
Horses: {};
|
||||
DrifterMelee: {};
|
||||
UpgradeVer: number;
|
||||
OperatorLoadOuts: {};
|
||||
AdultOperatorLoadOuts: {};
|
||||
KahlLoadOuts: {};
|
||||
CrewShips: {};
|
||||
}
|
||||
|
||||
export interface Config {
|
||||
Upgrades: any[];
|
||||
PvpUpgrades: any[];
|
||||
Skins: string[];
|
||||
pricol: Pricol;
|
||||
attcol: Pricol;
|
||||
sigcol: Sigcol;
|
||||
eyecol: Pricol;
|
||||
facial: Pricol;
|
||||
cloth: Pricol;
|
||||
syancol: Pricol;
|
||||
Songs: any[];
|
||||
}
|
||||
|
||||
export interface Pricol {
|
||||
t0: number;
|
||||
t1: number;
|
||||
t2: number;
|
||||
t3: number;
|
||||
m0: number;
|
||||
m1: number;
|
||||
en: number;
|
||||
}
|
||||
|
||||
export interface Sigcol {
|
||||
t0: number;
|
||||
t1: number;
|
||||
m0: number;
|
||||
en: number;
|
||||
}
|
||||
|
||||
export interface Col {
|
||||
t0: number;
|
||||
t1: number;
|
||||
t2: number;
|
||||
t3: number;
|
||||
m0?: number;
|
||||
m1?: number;
|
||||
en: number;
|
||||
e1?: number;
|
||||
}
|
||||
|
||||
export interface LoadOuts {
|
||||
NORMAL: LoadOut;
|
||||
SENTINEL: LoadOut;
|
||||
ARCHWING: LoadOut;
|
||||
NORMAL_PVP: LoadOut;
|
||||
LUNARO: LoadOut;
|
||||
OPERATOR: LoadOut;
|
||||
KDRIVE: LoadOut;
|
||||
DATAKNIFE: LoadOut;
|
||||
MECH: LoadOut;
|
||||
OPERATOR_ADULT: LoadOut;
|
||||
DRIFTER: LoadOut;
|
||||
}
|
||||
|
||||
type LoadOut = {
|
||||
Upgrades: Config[];
|
||||
PvpUpgrades: Config[];
|
||||
Skins: string[];
|
||||
pricol: { [key: string]: number };
|
||||
attcol: Config;
|
||||
sigcol: Config;
|
||||
eyecol: Config;
|
||||
facial: Config;
|
||||
cloth: Config;
|
||||
syancol: Config;
|
||||
Songs: Config[];
|
||||
};
|
||||
|
||||
export type EquipmentCategories =
|
||||
| { LoadOuts: { [key in keyof LoadOuts]: LoadOut } }
|
||||
| { LongGuns: Config }
|
||||
| { OperatorAmps: Config } // Replace 'any' with the actual type
|
||||
| { Pistols: Config } // Replace 'any' with the actual type
|
||||
| { Suits: { [key: string]: Config } }
|
||||
| { Melee: Config } // Replace 'any' with the actual type
|
||||
| { Sentinels: Config } // Replace 'any' with the actual type
|
||||
| { SentinelWeapons: Config } // Replace 'any' with the actual type
|
||||
// Add other categories based on your needs
|
||||
| { UpgradeVer: number }
|
||||
| { OperatorLoadOuts: Config } // Replace 'any' with the actual type
|
||||
| { AdultOperatorLoadOuts: Config } // Replace 'any' with the actual type
|
||||
| { KahlLoadOuts: Config } // Replace 'any' with the actual type
|
||||
| { CrewShips: Config }; // Replace 'any' with the actual type
|
Loading…
x
Reference in New Issue
Block a user