diff --git a/src/controllers/custom/importController.ts b/src/controllers/custom/importController.ts index 7f37979b..8c5f8c04 100644 --- a/src/controllers/custom/importController.ts +++ b/src/controllers/custom/importController.ts @@ -1,15 +1,24 @@ -import { importInventory } from "@/src/services/importService"; +import { importInventory, importLoadOutPresets } from "@/src/services/importService"; import { getInventory } from "@/src/services/inventoryService"; +import { getLoadout } from "@/src/services/loadoutService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { IInventoryClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; export const importController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); - const inventory = await getInventory(accountId); const request = JSON.parse(String(req.body)) as IImportRequest; + + const inventory = await getInventory(accountId); importInventory(inventory, request.inventory); await inventory.save(); + + if (request.inventory.LoadOutPresets) { + const loadout = await getLoadout(accountId); + importLoadOutPresets(loadout, request.inventory.LoadOutPresets); + await loadout.save(); + } + res.end(); }; diff --git a/src/services/importService.ts b/src/services/importService.ts index 49b1bfef..4679372d 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -9,6 +9,8 @@ import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, IInventoryClient, + ILoadoutConfigClient, + ILoadOutPresets, ISlots, IUpgradeClient, IUpgradeDatabase, @@ -16,6 +18,7 @@ import { IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; +import { ILoadoutConfigDatabase, ILoadoutDatabase } from "../types/saveLoadoutTypes"; /* eslint-disable @typescript-eslint/no-unused-vars */ @@ -137,3 +140,25 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< } } }; + +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); +}; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 7b6a4271..f78addad 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -210,7 +210,7 @@ export interface IInventoryClient extends IDailyAffiliations { Scoops: IEquipmentDatabase[]; TrainingRetriesLeft: number; LoadOutPresets: ILoadOutPresets; - CurrentLoadOutIds: Array; + CurrentLoadOutIds: IOid[]; // we store it in the database using this representation as well :/ Missions: IMission[]; RandomUpgradesIdentified?: number; LastRegionPlayed: TSolarMapRegion; @@ -667,7 +667,7 @@ export interface ILibraryPersonalProgress { Completed: boolean; } -//this needs to be checked against ILoadoutDatabase +// keep in sync with ILoadoutDatabase export interface ILoadOutPresets { NORMAL: ILoadoutConfigClient[]; NORMAL_PVP: ILoadoutConfigClient[]; @@ -680,6 +680,7 @@ export interface ILoadOutPresets { DATAKNIFE: ILoadoutConfigClient[]; MECH: ILoadoutConfigClient[]; OPERATOR_ADULT: ILoadoutConfigClient[]; + DRIFTER: ILoadoutConfigClient[]; } export enum FocusSchool { diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index b7c5b1e1..cd32b5c1 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -54,18 +54,19 @@ export interface IConfigEntry { export interface ILoadoutClient extends Omit {} +// keep in sync with ILoadOutPresets export interface ILoadoutDatabase { - NORMAL: ILoadoutEntry; - SENTINEL: ILoadoutEntry; - ARCHWING: ILoadoutEntry; - NORMAL_PVP: ILoadoutEntry; - LUNARO: ILoadoutEntry; - OPERATOR: ILoadoutEntry; - KDRIVE: ILoadoutEntry; - DATAKNIFE: ILoadoutEntry; - MECH: ILoadoutEntry; - OPERATOR_ADULT: ILoadoutEntry; - DRIFTER: ILoadoutEntry; + NORMAL: ILoadoutConfigDatabase[]; + SENTINEL: ILoadoutConfigDatabase[]; + ARCHWING: ILoadoutConfigDatabase[]; + NORMAL_PVP: ILoadoutConfigDatabase[]; + LUNARO: ILoadoutConfigDatabase[]; + OPERATOR: ILoadoutConfigDatabase[]; + KDRIVE: ILoadoutConfigDatabase[]; + DATAKNIFE: ILoadoutConfigDatabase[]; + MECH: ILoadoutConfigDatabase[]; + OPERATOR_ADULT: ILoadoutConfigDatabase[]; + DRIFTER: ILoadoutConfigDatabase[]; _id: Types.ObjectId; loadoutOwnerId: Types.ObjectId; }