2025-01-19 12:33:04 +01:00
|
|
|
import { Types } from "mongoose";
|
2025-01-20 07:18:35 +01:00
|
|
|
import {
|
|
|
|
IEquipmentClient,
|
|
|
|
IEquipmentDatabase,
|
|
|
|
IOperatorConfigClient,
|
|
|
|
IOperatorConfigDatabase
|
|
|
|
} from "../types/inventoryTypes/commonInventoryTypes";
|
2025-01-19 12:33:04 +01:00
|
|
|
import { IMongoDate } from "../types/commonTypes";
|
2025-01-19 17:21:02 +01:00
|
|
|
import {
|
2025-01-20 05:04:10 +01:00
|
|
|
equipmentKeys,
|
2025-01-19 17:21:02 +01:00
|
|
|
IInventoryClient,
|
2025-01-20 08:09:34 +01:00
|
|
|
ILoadoutConfigClient,
|
|
|
|
ILoadOutPresets,
|
2025-01-20 05:16:40 +01:00
|
|
|
ISlots,
|
2025-01-19 17:21:02 +01:00
|
|
|
IUpgradeClient,
|
|
|
|
IUpgradeDatabase,
|
|
|
|
IWeaponSkinClient,
|
|
|
|
IWeaponSkinDatabase
|
|
|
|
} from "../types/inventoryTypes/inventoryTypes";
|
2025-01-19 12:33:04 +01:00
|
|
|
import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel";
|
2025-01-20 08:09:34 +01:00
|
|
|
import { ILoadoutConfigDatabase, ILoadoutDatabase } from "../types/saveLoadoutTypes";
|
2025-01-19 12:33:04 +01:00
|
|
|
|
2025-01-19 17:21:02 +01:00
|
|
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
|
|
|
2025-01-19 14:53:45 +01:00
|
|
|
const convertDate = (value: IMongoDate): Date => {
|
2025-01-19 12:33:04 +01:00
|
|
|
return new Date(parseInt(value.$date.$numberLong));
|
|
|
|
};
|
|
|
|
|
2025-01-19 14:53:45 +01:00
|
|
|
const convertOptionalDate = (value: IMongoDate | undefined): Date | undefined => {
|
|
|
|
return value ? convertDate(value) : undefined;
|
2025-01-19 12:33:04 +01:00
|
|
|
};
|
|
|
|
|
2025-01-19 14:53:45 +01:00
|
|
|
const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => {
|
2025-01-19 12:33:04 +01:00
|
|
|
const { ItemId, ...rest } = client;
|
|
|
|
return {
|
|
|
|
...rest,
|
|
|
|
_id: new Types.ObjectId(client.ItemId.$oid),
|
2025-01-19 14:53:45 +01:00
|
|
|
InfestationDate: convertOptionalDate(client.InfestationDate),
|
|
|
|
Expiry: convertOptionalDate(client.Expiry),
|
|
|
|
UpgradesExpiry: convertOptionalDate(client.UpgradesExpiry)
|
2025-01-19 12:33:04 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-01-19 17:04:38 +01:00
|
|
|
const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => {
|
|
|
|
const { ItemId, ...rest } = client;
|
|
|
|
return {
|
|
|
|
...rest,
|
|
|
|
_id: new Types.ObjectId(client.ItemId.$oid)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-01-19 17:21:02 +01:00
|
|
|
const convertUpgrade = (client: IUpgradeClient): IUpgradeDatabase => {
|
|
|
|
const { ItemId, ...rest } = client;
|
|
|
|
return {
|
|
|
|
...rest,
|
|
|
|
_id: new Types.ObjectId(client.ItemId.$oid)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-01-20 07:18:35 +01:00
|
|
|
const convertOperatorConfig = (client: IOperatorConfigClient): IOperatorConfigDatabase => {
|
|
|
|
const { ItemId, ...rest } = client;
|
|
|
|
return {
|
|
|
|
...rest,
|
|
|
|
_id: new Types.ObjectId(client.ItemId.$oid)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-01-19 17:04:38 +01:00
|
|
|
const replaceArray = <T>(arr: T[], replacement: T[]): void => {
|
|
|
|
arr.splice(0, arr.length);
|
|
|
|
replacement.forEach(x => {
|
|
|
|
arr.push(x);
|
2025-01-19 12:33:04 +01:00
|
|
|
});
|
|
|
|
};
|
2025-01-19 17:04:38 +01:00
|
|
|
|
2025-01-20 05:16:40 +01:00
|
|
|
const replaceSlots = (db: ISlots, client: ISlots): void => {
|
|
|
|
db.Extra = client.Extra;
|
|
|
|
db.Slots = client.Slots;
|
|
|
|
};
|
|
|
|
|
2025-01-20 04:45:02 +01:00
|
|
|
export const importInventory = (db: TInventoryDatabaseDocument, client: Partial<IInventoryClient>): void => {
|
2025-01-20 05:04:10 +01:00
|
|
|
for (const key of equipmentKeys) {
|
|
|
|
if (client[key]) {
|
|
|
|
replaceArray<IEquipmentDatabase>(db[key], client[key].map(convertEquipment));
|
|
|
|
}
|
2025-01-20 04:45:02 +01:00
|
|
|
}
|
|
|
|
if (client.WeaponSkins) {
|
|
|
|
replaceArray<IWeaponSkinDatabase>(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin));
|
|
|
|
}
|
|
|
|
if (client.Upgrades) {
|
|
|
|
replaceArray<IUpgradeDatabase>(db.Upgrades, client.Upgrades.map(convertUpgrade));
|
|
|
|
}
|
2025-01-20 07:50:51 +01:00
|
|
|
for (const key of ["RawUpgrades", "MiscItems"] as const) {
|
|
|
|
if (client[key]) {
|
|
|
|
db[key].splice(0, db[key].length);
|
|
|
|
client[key].forEach(x => {
|
|
|
|
db[key].push({
|
|
|
|
ItemType: x.ItemType,
|
|
|
|
ItemCount: x.ItemCount
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2025-01-20 07:18:35 +01:00
|
|
|
for (const key of ["OperatorLoadOuts", "AdultOperatorLoadOuts"] as const) {
|
|
|
|
if (client[key]) {
|
|
|
|
replaceArray<IOperatorConfigDatabase>(db[key], client[key].map(convertOperatorConfig));
|
|
|
|
}
|
|
|
|
}
|
2025-01-20 05:16:40 +01:00
|
|
|
for (const key of [
|
|
|
|
"SuitBin",
|
|
|
|
"WeaponBin",
|
|
|
|
"SentinelBin",
|
|
|
|
"SpaceSuitBin",
|
|
|
|
"SpaceWeaponBin",
|
|
|
|
"PvpBonusLoadoutBin",
|
|
|
|
"PveBonusLoadoutBin",
|
|
|
|
"RandomModBin",
|
|
|
|
"MechBin",
|
|
|
|
"CrewMemberBin",
|
|
|
|
"OperatorAmpBin",
|
|
|
|
"CrewShipSalvageBin"
|
|
|
|
] as const) {
|
|
|
|
if (client[key]) {
|
|
|
|
replaceSlots(db[key], client[key]);
|
|
|
|
}
|
|
|
|
}
|
2025-01-20 07:09:59 +01:00
|
|
|
for (const key of [
|
|
|
|
"RegularCredits",
|
|
|
|
"PremiumCredits",
|
|
|
|
"PremiumCreditsFree",
|
|
|
|
"FusionPoints",
|
|
|
|
"PrimeTokens"
|
|
|
|
] as const) {
|
|
|
|
if (client[key]) {
|
|
|
|
db[key] = client[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (const key of ["ThemeStyle", "ThemeBackground", "ThemeSounds", "EquippedInstrument"] as const) {
|
|
|
|
if (client[key]) {
|
|
|
|
db[key] = client[key];
|
|
|
|
}
|
|
|
|
}
|
2025-01-19 17:04:38 +01:00
|
|
|
};
|
2025-01-20 08:09:34 +01:00
|
|
|
|
|
|
|
const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => {
|
|
|
|
const { ItemId, ...rest } = client;
|
|
|
|
return {
|
|
|
|
...rest,
|
|
|
|
_id: new Types.ObjectId(client.ItemId.$oid)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
export const importLoadOutPresets = (db: ILoadoutDatabase, client: ILoadOutPresets): void => {
|
|
|
|
db.NORMAL = client.NORMAL.map(convertLoadOutConfig);
|
|
|
|
db.SENTINEL = client.SENTINEL.map(convertLoadOutConfig);
|
|
|
|
db.ARCHWING = client.ARCHWING.map(convertLoadOutConfig);
|
|
|
|
db.NORMAL_PVP = client.NORMAL_PVP.map(convertLoadOutConfig);
|
|
|
|
db.LUNARO = client.LUNARO.map(convertLoadOutConfig);
|
|
|
|
db.OPERATOR = client.OPERATOR.map(convertLoadOutConfig);
|
|
|
|
db.KDRIVE = client.KDRIVE.map(convertLoadOutConfig);
|
|
|
|
db.DATAKNIFE = client.DATAKNIFE.map(convertLoadOutConfig);
|
|
|
|
db.MECH = client.MECH.map(convertLoadOutConfig);
|
|
|
|
db.OPERATOR_ADULT = client.OPERATOR_ADULT.map(convertLoadOutConfig);
|
|
|
|
db.DRIFTER = client.DRIFTER.map(convertLoadOutConfig);
|
|
|
|
};
|