diff --git a/src/controllers/api/saveLoadout.ts b/src/controllers/api/saveLoadout.ts deleted file mode 100644 index 38ea5559..00000000 --- a/src/controllers/api/saveLoadout.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { RequestHandler } from "express"; -import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes"; -import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService"; -import { getAccountIdForRequest } from "@/src/services/loginService"; -import { logger } from "@/src/utils/logger"; - -export const saveLoadoutController: RequestHandler = async (req, res) => { - //validate here - const accountId = await getAccountIdForRequest(req); - - try { - const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest; - // console.log(util.inspect(body, { showHidden: false, depth: null, colors: true })); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { UpgradeVer, ...equipmentChanges } = body; - const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId); - - //send back new loadout id, if new loadout was added - if (newLoadoutId) { - res.send(newLoadoutId); - } - res.status(200).end(); - } catch (error: unknown) { - if (error instanceof Error) { - logger.error(`error in saveLoadoutController: ${error.message}`); - res.status(400).json({ error: error.message }); - } else { - res.status(400).json({ error: "unknown error" }); - } - } -}; diff --git a/src/controllers/api/saveLoadoutController.ts b/src/controllers/api/saveLoadoutController.ts new file mode 100644 index 00000000..6fd3de61 --- /dev/null +++ b/src/controllers/api/saveLoadoutController.ts @@ -0,0 +1,21 @@ +import { RequestHandler } from "express"; +import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes"; +import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; + +export const saveLoadoutController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + + const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest; + // console.log(util.inspect(body, { showHidden: false, depth: null, colors: true })); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { UpgradeVer, ...equipmentChanges } = body; + const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId); + + //send back new loadout id, if new loadout was added + if (newLoadoutId) { + res.send(newLoadoutId); + } + res.end(); +}; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 01b5aca5..0cb698cc 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -612,6 +612,7 @@ const spectreLoadoutsSchema = new Schema( const weaponSkinsSchema = new Schema( { ItemType: String, + Favorite: Boolean, IsNew: Boolean }, { id: false } @@ -880,6 +881,7 @@ const EquipmentSchema = new Schema( RailjackImage: FlavourItemSchema, CrewMembers: crewShipMembersSchema, Details: detailsSchema, + Favorite: Boolean, IsNew: Boolean }, { id: false } diff --git a/src/routes/api.ts b/src/routes/api.ts index 7dfd562f..385553d4 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -97,7 +97,7 @@ import { removeFromGuildController } from "@/src/controllers/api/removeFromGuild import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController"; import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController"; import { saveDialogueController } from "@/src/controllers/api/saveDialogueController"; -import { saveLoadoutController } from "@/src/controllers/api/saveLoadout"; +import { saveLoadoutController } from "@/src/controllers/api/saveLoadoutController"; import { saveSettingsController } from "@/src/controllers/api/saveSettingsController"; import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController"; import { sellController } from "@/src/controllers/api/sellController"; diff --git a/src/services/saveLoadoutService.ts b/src/services/saveLoadoutService.ts index 2f8711c6..472c599d 100644 --- a/src/services/saveLoadoutService.ts +++ b/src/services/saveLoadoutService.ts @@ -140,7 +140,22 @@ export const handleInventoryItemConfigChange = async ( case "WeaponSkins": { const itemEntries = equipment as IItemEntry; for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) { - inventory.WeaponSkins.id(itemId)!.IsNew = itemConfigEntries.IsNew; + if (itemId.startsWith("ca70ca70ca70ca70")) { + logger.warn( + `unlockAllSkins does not work with favoriting items because you don't actually own it` + ); + } else { + const inventoryItem = inventory.WeaponSkins.id(itemId); + if (!inventoryItem) { + throw new Error(`inventory item WeaponSkins not found with id ${itemId}`); + } + if ("Favorite" in itemConfigEntries) { + inventoryItem.Favorite = itemConfigEntries.Favorite; + } + if ("IsNew" in itemConfigEntries) { + inventoryItem.IsNew = itemConfigEntries.IsNew; + } + } } break; } @@ -163,6 +178,9 @@ export const handleInventoryItemConfigChange = async ( inventoryItem.Configs[parseInt(configId)] = config; } } + if ("Favorite" in itemConfigEntries) { + inventoryItem.Favorite = itemConfigEntries.Favorite; + } if ("IsNew" in itemConfigEntries) { inventoryItem.IsNew = itemConfigEntries.IsNew; } diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index 06a8ec9c..37168a7d 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -142,6 +142,7 @@ export interface IEquipmentDatabase { RailjackImage?: IFlavourItem; CrewMembers?: ICrewShipMembersDatabase; Details?: IKubrowPetDetailsDatabase; + Favorite?: boolean; IsNew?: boolean; _id: Types.ObjectId; } diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index c092fb9f..c65b426c 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -1034,6 +1034,7 @@ export interface ITaunt { export interface IWeaponSkinDatabase { ItemType: string; + Favorite?: boolean; IsNew?: boolean; _id: Types.ObjectId; } diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index b496a4ea..61f1aba4 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -51,7 +51,7 @@ export interface IItemEntry { export type IConfigEntry = { [configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig; -} & { IsNew?: boolean }; +} & { Favorite?: boolean; IsNew?: boolean }; export type ILoadoutClient = Omit;