diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index c95db049..53e29ed5 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -7,6 +7,7 @@ import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/ty import { ExportMisc, ExportRecipes } from "warframe-public-export-plus"; import { getRecipe } from "@/src/services/itemDataService"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; +import { toMongoDate } from "@/src/helpers/inventoryHelpers"; export const infestedFoundryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -184,7 +185,34 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } + case "u": { + const request = getJSONfromString(String(req.body)) as IHelminthInvigorationRequest; + const inventory = await getInventory(accountId); + const suit = inventory.Suits.find(x => x._id.toString() == request.SuitId.$oid)!; + const upgradesExpiry = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000); + suit.OffensiveUpgrade = request.OffensiveUpgradeType; + suit.DefensiveUpgrade = request.DefensiveUpgradeType; + suit.UpgradesExpiry = upgradesExpiry; + addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + for (let i = 0; i != request.ResourceTypes.length; ++i) { + inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -= + request.ResourceCosts[i]; + } + await inventory.save(); + res.json({ + SuitId: request.SuitId, + OffensiveUpgrade: request.OffensiveUpgradeType, + DefensiveUpgrade: request.DefensiveUpgradeType, + UpgradesExpiry: toMongoDate(upgradesExpiry), + InventoryChanges: { + InfestedFoundry: inventory.toJSON().InfestedFoundry + } + }); + break; + } + default: + console.log(String(req.body)); throw new Error(`unhandled infestedFoundry mode: ${String(req.query.mode)}`); } }; @@ -268,3 +296,11 @@ interface IHelminthOfferingsUpdate { SuitTypes: string[]; Extra: boolean; } + +interface IHelminthInvigorationRequest { + SuitId: IOid; + OffensiveUpgradeType: string; + DefensiveUpgradeType: string; + ResourceTypes: string[]; + ResourceCosts: number[]; +} diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index ec39bb1d..7c8d5b75 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -233,6 +233,9 @@ const EquipmentSchema = new Schema( UnlockLevel: Number, Expiry: Date, SkillTree: String, + OffensiveUpgrade: String, + DefensiveUpgrade: String, + UpgradesExpiry: Date, ArchonCrystalUpgrades: { type: [ArchonCrystalUpgradeSchema], default: undefined } }, { id: false } diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index f7026c0c..ccc5851e 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -78,8 +78,9 @@ export interface IEquipmentSelection { hide?: boolean; } -export interface IEquipmentClient extends Omit { +export interface IEquipmentClient extends Omit { ItemId: IOid; + UpgradesExpiry?: IMongoDate; } export enum EquipmentFeatures { @@ -112,6 +113,9 @@ export interface IEquipmentDatabase { UnlockLevel?: number; Expiry?: IMongoDate; SkillTree?: string; + OffensiveUpgrade?: string; + DefensiveUpgrade?: string; + UpgradesExpiry?: Date; ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; _id: Types.ObjectId; }