From f79767d71a707ee2e32147666f3ee1afedf1b54a Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon Date: Sat, 6 Jul 2024 08:54:51 +0200 Subject: [PATCH] Goal Schema --- src/models/inventoryModels/inventoryModel.ts | 2 +- src/models/inventoryModels/loadoutModel.ts | 2 +- src/models/worldStateModel.ts | 63 ++++++++++++++++---- src/types/worldStateTypes.ts | 52 +++++++++------- 4 files changed, 84 insertions(+), 35 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 392952b7..396117e7 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -51,7 +51,7 @@ import { } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; -const typeCountSchema = new Schema({ ItemType: String, ItemCount: Number }, { _id: false }); +export const typeCountSchema = new Schema({ ItemType: String, ItemCount: Number }, { _id: false }); const focusXPSchema = new Schema( { diff --git a/src/models/inventoryModels/loadoutModel.ts b/src/models/inventoryModels/loadoutModel.ts index 30a22c90..f6575cea 100644 --- a/src/models/inventoryModels/loadoutModel.ts +++ b/src/models/inventoryModels/loadoutModel.ts @@ -3,7 +3,7 @@ import { IEquipmentSelection } from "@/src/types/inventoryTypes/commonInventoryT import { ILoadoutConfigDatabase, ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; import { Model, Schema, Types, model } from "mongoose"; -const oidSchema = new Schema( +export const oidSchema = new Schema( { $oid: String }, diff --git a/src/models/worldStateModel.ts b/src/models/worldStateModel.ts index 38dce2dc..8d2b0f1f 100644 --- a/src/models/worldStateModel.ts +++ b/src/models/worldStateModel.ts @@ -10,7 +10,6 @@ import { IPVPChallengeInstanceParam, IMission, IAlert, - ICountedItems, IReward, ISortie, ILiteSortie, @@ -34,8 +33,11 @@ import { IFeaturedGuild, IActiveChallenge, ISeasonInfo, - IWorldStateDocument + IWorldStateDocument, + IGoal } from "@/src/types/worldStateTypes"; +import { oidSchema } from "@/src/models/inventoryModels/loadoutModel"; +import { typeCountSchema } from "@/src/models/inventoryModels/inventoryModel"; const messageSchema = new Schema( { @@ -78,20 +80,12 @@ EventSchema.set("toJSON", { } }); -const CountedItemsSchema = new Schema( - { - ItemType: String, - ItemCount: Number - }, - { _id: false } -); - const RewardSchema = new Schema( { credits: Number, xp: Number, items: [String], - countedItems: [CountedItemsSchema] + countedItems: [typeCountSchema] }, { _id: false } ); @@ -105,6 +99,7 @@ const MissionSchema = new Schema( missionReward: RewardSchema, levelOverride: String, enemySpec: String, + extraEnemySpec: String, minEnemyLevel: Number, maxEnemyLevel: Number, descText: String, @@ -119,15 +114,59 @@ const MissionSchema = new Schema( vipAgent: Boolean, leadersAlwaysAllowed: Boolean, goalTag: String, + questReq: String, levelAuras: [String] }, { _id: false } ); +const GoalSchema = new Schema({ + Activation: Number, + Expiry: Number, + + Regions: [Number], + OptionalInMission: Boolean, + UpgradeIds: [oidSchema], + + Node: String, + MissionKeyName: String, + Faction: String, + + Icon: String, + ToolTip: String, + Desc: String, + + Tag: String, + ScoreLocTag: String, + ScoreVar: String, + + Reward: RewardSchema, + InterimRewards: [RewardSchema], + + Goal: Number, + InterimGoals: [Number], + ClanGoal: [Number], + HealthPct: Number, + Count: Number, + ItemType: String, + + Personal: Boolean, + Community: Boolean +}); + +GoalSchema.set("toJSON", { + transform(_document, returnedObject) { + returnedObject._id = { $oid: returnedObject._id.toString() }; + returnedObject.Activation = { $date: { $numberLong: returnedObject.Activation.toString() } }; + returnedObject.Expiry = { $date: { $numberLong: returnedObject.Expiry.toString() } }; + } +}); + const AlertSchema = new Schema({ Activation: Number, Expiry: Number, MissionInfo: MissionSchema, + Icon: String, ForceUnlock: Boolean, Tag: String }); @@ -539,7 +578,7 @@ SeasonInfoSchema.set("toJSON", { const WorldStateSchema = new Schema({ Events: [EventSchema], - // Goals: [GoalSchema], + Goals: [GoalSchema], Alerts: [AlertSchema], Sorties: [SortieSchema], LiteSorties: [LiteSortieSchema], diff --git a/src/types/worldStateTypes.ts b/src/types/worldStateTypes.ts index 950c151c..d1ea6f91 100644 --- a/src/types/worldStateTypes.ts +++ b/src/types/worldStateTypes.ts @@ -1,5 +1,6 @@ import { IOid } from "@/src/types/commonTypes"; import { Document, ObjectId } from "mongoose"; +import { ITypeCount } from "./inventoryTypes/inventoryTypes"; export interface IMessage { LanguageCode?: string; @@ -21,12 +22,7 @@ export interface IReward { credits?: number; xp?: number; items?: string[]; - countedItems?: ICountedItems[]; -} - -export interface ICountedItems { - ItemType: string; - ItemCount: number; + countedItems?: ITypeCount[]; } export interface IMission { @@ -37,6 +33,7 @@ export interface IMission { missionReward: IReward; levelOverride: string; enemySpec: string; + extraEnemySpec?: string; minEnemyLevel: number; maxEnemyLevel: number; descText: string; @@ -51,11 +48,12 @@ export interface IMission { vipAgent?: boolean; leadersAlwaysAllowed?: boolean; goalTag?: string; + questReq?: string; levelAuras?: string[]; } export interface IEvent { - Messages: IMessage[]; + Messages?: IMessage[]; Msg?: string; Prop?: string; ImageUrl?: string; @@ -71,28 +69,40 @@ export interface IEvent { } export interface IGoal extends IBaseWorldStateObject { + Regions?: number[]; + OptionalInMission?: boolean; + UpgradeIds?: IOid[]; + Node: string; - ScoreVar: string; - ScoreLocTag: string; - Count: number; - HealthPct: number; - Regions: number[]; - Desc: string; + MissionKeyName?: string; + Faction?: string; + + Icon: string; ToolTip: string; - OptionalInMission: boolean; - Tag: string; - UpgradeIds: IOid[]; + Desc: string; + + Tag?: string; + ScoreLocTag: string; + ScoreVar?: string; + + Reward: IReward; + InterimRewards?: IReward[]; + + Goal: number; + InterimGoals?: number[]; + ClanGoal?: number[]; + HealthPct: number; + Count: number; + ItemType?: string; + Personal: boolean; Community: boolean; - Goal: number; - Reward: IReward; - InterimGoals: number[]; - InterimRewards: IReward[]; } export interface IAlert extends IBaseWorldStateObject { MissionInfo: IMission; - ForceUnlock: boolean; + ForceUnlock?: boolean; + Icon?: string; Tag: string; }