From 4f0d2de4a12816dc32ace3535fd55679cb3d5ac7 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 18 Apr 2025 06:21:30 +0200 Subject: [PATCH] feat: save InvasionProgress/QualifyingInvasions --- src/models/inventoryModels/inventoryModel.ts | 27 +++++++++++++++++-- src/services/missionInventoryUpdateService.ts | 20 ++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 15 ++++++++++- src/types/requestTypes.ts | 4 ++- 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 63e3842e..db77926e 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -92,7 +92,9 @@ import { ICrewMemberSkillEfficiency, ICrewMemberDatabase, ICrewMemberClient, - ISortieRewardAttenuation + ISortieRewardAttenuation, + IInvasionProgressDatabase, + IInvasionProgressClient } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -684,6 +686,27 @@ questKeysSchema.set("toJSON", { export const fusionTreasuresSchema = new Schema().add(typeCountSchema).add({ Sockets: Number }); +const invasionProgressSchema = new Schema( + { + invasionId: Schema.Types.ObjectId, + Delta: Number, + AttackerScore: Number, + DefenderScore: Number + }, + { _id: false } +); + +invasionProgressSchema.set("toJSON", { + transform(_doc, obj) { + const db = obj as IInvasionProgressDatabase; + const client = obj as IInvasionProgressClient; + + client._id = toOid(db.invasionId); + delete obj.invasionId; + delete obj.__v; + } +}); + const spectreLoadoutsSchema = new Schema( { ItemType: String, @@ -1482,7 +1505,7 @@ const inventorySchema = new Schema( SentientSpawnChanceBoosters: Schema.Types.Mixed, - QualifyingInvasions: [Schema.Types.Mixed], + QualifyingInvasions: [invasionProgressSchema], FactionScores: [Number], // https://warframe.fandom.com/wiki/Specter_(Tenno) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 7a1f61c3..cf0b032a 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -532,6 +532,26 @@ export const addMissionInventoryUpdates = async ( inventoryChanges.RegularCredits -= value; break; } + case "InvasionProgress": { + for (const clientProgress of value) { + const dbProgress = inventory.QualifyingInvasions.find(x => + x.invasionId.equals(clientProgress._id.$oid) + ); + if (dbProgress) { + dbProgress.Delta += clientProgress.Delta; + dbProgress.AttackerScore += clientProgress.AttackerScore; + dbProgress.DefenderScore += clientProgress.DefenderScore; + } else { + inventory.QualifyingInvasions.push({ + invasionId: new Types.ObjectId(clientProgress._id.$oid), + Delta: clientProgress.Delta, + AttackerScore: clientProgress.AttackerScore, + DefenderScore: clientProgress.DefenderScore + }); + } + } + break; + } default: // Equipment XP updates if (equipmentKeys.includes(key as TEquipmentKey)) { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index d461ef45..03f3fda7 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -50,6 +50,7 @@ export interface IInventoryDatabase | "LastSortieReward" | "LastLiteSortieReward" | "CrewMembers" + | "QualifyingInvasions" | TEquipmentKey >, InventoryDatabaseEquipment { @@ -85,6 +86,7 @@ export interface IInventoryDatabase LastSortieReward?: ILastSortieRewardDatabase[]; LastLiteSortieReward?: ILastSortieRewardDatabase[]; CrewMembers: ICrewMemberDatabase[]; + QualifyingInvasions: IInvasionProgressDatabase[]; } export interface IQuestKeyDatabase { @@ -272,7 +274,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu SentientSpawnChanceBoosters: ISentientSpawnChanceBoosters; SupportedSyndicate?: string; Affiliations: IAffiliation[]; - QualifyingInvasions: any[]; + QualifyingInvasions: IInvasionProgressClient[]; FactionScores: number[]; ArchwingEnabled?: boolean; PendingSpectreLoadouts?: ISpectreLoadout[]; @@ -676,6 +678,17 @@ export interface IInvasionChainProgress { count: number; } +export interface IInvasionProgressClient { + _id: IOid; + Delta: number; + AttackerScore: number; + DefenderScore: number; +} + +export interface IInvasionProgressDatabase extends Omit { + invasionId: Types.ObjectId; +} + export interface IKubrowPetEggClient { ItemType: string; ExpirationDate: IMongoDate; // seems to be set to 7 days ahead @ 0 UTC diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index fbcc74fd..b81fa064 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -19,7 +19,8 @@ import { ICollectibleEntry, IDiscoveredMarker, ILockedWeaponGroupClient, - ILoadOutPresets + ILoadOutPresets, + IInvasionProgressClient } from "./inventoryTypes/inventoryTypes"; import { IGroup } from "./loginTypes"; @@ -123,6 +124,7 @@ export type IMissionInventoryUpdateRequest = { }; wagerTier?: number; // the index creditsFee?: number; // the index + InvasionProgress?: IInvasionProgressClient[]; } & { [K in TEquipmentKey]?: IEquipmentClient[]; };