2024-02-12 14:31:28 +01:00
|
|
|
import { Model, Schema, Types, model } from "mongoose";
|
2023-09-05 07:37:30 -05:00
|
|
|
import {
|
|
|
|
IFlavourItem,
|
|
|
|
IRawUpgrade,
|
2024-05-29 16:18:41 +02:00
|
|
|
ICrewShipSalvagedWeaponSkin,
|
2023-09-05 07:37:30 -05:00
|
|
|
IMiscItem,
|
|
|
|
IInventoryDatabase,
|
2023-09-11 13:20:07 +02:00
|
|
|
IBooster,
|
|
|
|
IInventoryResponse,
|
2023-12-14 17:34:15 +01:00
|
|
|
ISlots,
|
|
|
|
IMailbox,
|
2024-01-25 14:49:45 +01:00
|
|
|
IDuviriInfo,
|
|
|
|
IPendingRecipe as IPendingRecipeDatabase,
|
2024-02-12 14:31:28 +01:00
|
|
|
IPendingRecipeResponse,
|
|
|
|
ITypeCount,
|
|
|
|
IFocusXP,
|
|
|
|
IFocusUpgrades,
|
|
|
|
ITypeXPItem,
|
|
|
|
IChallengeProgress,
|
|
|
|
IStepSequencer,
|
|
|
|
IAffiliation,
|
|
|
|
INotePacks,
|
|
|
|
ICompletedJobChain,
|
2024-06-16 17:51:20 +02:00
|
|
|
ISeasonChallenge,
|
2024-02-12 14:31:28 +01:00
|
|
|
IPlayerSkills,
|
|
|
|
ISettings,
|
|
|
|
IInfestedFoundry,
|
|
|
|
IConsumedSuit,
|
|
|
|
IQuestProgress,
|
|
|
|
IQuestKeyDatabase,
|
|
|
|
IQuestKeyResponse,
|
|
|
|
IFusionTreasure,
|
|
|
|
ISpectreLoadout,
|
|
|
|
IWeaponSkin,
|
|
|
|
ITauntHistory,
|
|
|
|
IPeriodicMissionCompletionDatabase,
|
|
|
|
IPeriodicMissionCompletionResponse,
|
|
|
|
ILoreFragmentScan
|
2023-12-14 17:34:15 +01:00
|
|
|
} from "../../types/inventoryTypes/inventoryTypes";
|
2024-05-06 15:19:42 +02:00
|
|
|
import { IOid } from "../../types/commonTypes";
|
2023-12-14 17:34:15 +01:00
|
|
|
import {
|
|
|
|
IAbilityOverride,
|
|
|
|
IColor,
|
|
|
|
IItemConfig,
|
|
|
|
IOperatorConfigDatabase,
|
2024-06-16 17:51:20 +02:00
|
|
|
IPolarity,
|
|
|
|
IEquipmentDatabase,
|
2024-06-18 13:02:29 +02:00
|
|
|
IOperatorConfigClient,
|
|
|
|
IArchonCrystalUpgrade
|
2023-12-14 17:34:15 +01:00
|
|
|
} from "@/src/types/inventoryTypes/commonInventoryTypes";
|
2024-02-12 14:31:28 +01:00
|
|
|
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
|
|
|
|
|
|
|
const typeCountSchema = new Schema<ITypeCount>({ ItemType: String, ItemCount: Number }, { _id: false });
|
|
|
|
|
|
|
|
const focusXPSchema = new Schema<IFocusXP>(
|
|
|
|
{
|
|
|
|
AP_POWER: Number,
|
|
|
|
AP_TACTIC: Number,
|
|
|
|
AP_DEFENSE: Number,
|
|
|
|
AP_ATTACK: Number,
|
|
|
|
AP_WARD: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const focusUpgradesSchema = new Schema<IFocusUpgrades>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
Level: Number,
|
|
|
|
IsUniversal: Boolean
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2023-12-14 17:34:15 +01:00
|
|
|
|
2024-01-25 14:49:45 +01:00
|
|
|
const pendingRecipeSchema = new Schema<IPendingRecipeDatabase>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
CompletionDate: Date
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
pendingRecipeSchema.virtual("ItemId").get(function () {
|
|
|
|
return { $oid: this._id.toString() };
|
|
|
|
});
|
|
|
|
|
|
|
|
pendingRecipeSchema.set("toJSON", {
|
|
|
|
virtuals: true,
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
(returnedObject as IPendingRecipeResponse).CompletionDate = {
|
|
|
|
$date: { $numberLong: (returnedObject as IPendingRecipeDatabase).CompletionDate.getTime().toString() }
|
|
|
|
};
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-06-07 16:06:35 +02:00
|
|
|
const polaritySchema = new Schema<IPolarity>(
|
|
|
|
{
|
|
|
|
Slot: Number,
|
|
|
|
Value: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2023-06-04 03:06:22 +02:00
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
const abilityOverrideSchema = new Schema<IAbilityOverride>({
|
2023-06-04 03:06:22 +02:00
|
|
|
Ability: String,
|
|
|
|
Index: Number
|
|
|
|
});
|
2024-02-18 13:58:43 +01:00
|
|
|
export const colorSchema = new Schema<IColor>(
|
2023-12-14 17:34:15 +01:00
|
|
|
{
|
|
|
|
t0: Number,
|
|
|
|
t1: Number,
|
|
|
|
t2: Number,
|
|
|
|
t3: Number,
|
|
|
|
en: Number,
|
|
|
|
e1: Number,
|
|
|
|
m0: Number,
|
|
|
|
m1: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const operatorConfigSchema = new Schema<IOperatorConfigDatabase>(
|
|
|
|
{
|
|
|
|
Skins: [String],
|
|
|
|
pricol: colorSchema,
|
|
|
|
attcol: colorSchema,
|
|
|
|
sigcol: colorSchema,
|
|
|
|
eyecol: colorSchema,
|
|
|
|
facial: colorSchema,
|
|
|
|
syancol: colorSchema,
|
|
|
|
cloth: colorSchema,
|
|
|
|
Upgrades: [String],
|
|
|
|
Name: String, // not sure if possible in operator
|
|
|
|
ugly: Boolean // not sure if possible in operator
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
operatorConfigSchema.virtual("ItemId").get(function () {
|
|
|
|
return { $oid: this._id.toString() } satisfies IOid;
|
2023-06-04 03:06:22 +02:00
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
operatorConfigSchema.set("toJSON", {
|
|
|
|
virtuals: true,
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
2023-06-14 02:26:19 +02:00
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
///TODO: clearly seperate the different config schemas. (suit and weapon and so on)
|
|
|
|
const ItemConfigSchema = new Schema<IItemConfig>(
|
|
|
|
{
|
|
|
|
Skins: [String],
|
|
|
|
pricol: colorSchema,
|
|
|
|
attcol: colorSchema,
|
|
|
|
sigcol: colorSchema,
|
|
|
|
eyecol: colorSchema,
|
|
|
|
facial: colorSchema,
|
|
|
|
syancol: colorSchema,
|
|
|
|
Upgrades: [String],
|
2024-06-20 11:48:12 +02:00
|
|
|
Songs: {
|
|
|
|
type: [
|
|
|
|
{
|
|
|
|
m: String,
|
|
|
|
b: String,
|
|
|
|
p: String,
|
|
|
|
s: String
|
|
|
|
}
|
|
|
|
],
|
|
|
|
default: undefined
|
|
|
|
},
|
2023-12-14 17:34:15 +01:00
|
|
|
Name: String,
|
|
|
|
AbilityOverride: abilityOverrideSchema,
|
|
|
|
PvpUpgrades: [String],
|
|
|
|
ugly: Boolean
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
ItemConfigSchema.set("toJSON", {
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-06-18 13:02:29 +02:00
|
|
|
const ArchonCrystalUpgradeSchema = new Schema<IArchonCrystalUpgrade>(
|
|
|
|
{
|
|
|
|
UpgradeType: String,
|
|
|
|
Color: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
ArchonCrystalUpgradeSchema.set("toJSON", {
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-06-19 17:46:12 +02:00
|
|
|
const EquipmentSchema = new Schema<IEquipmentDatabase>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
Configs: [ItemConfigSchema],
|
|
|
|
UpgradeVer: Number,
|
|
|
|
XP: Number,
|
|
|
|
Features: Number,
|
|
|
|
Polarized: Number,
|
|
|
|
Polarity: [polaritySchema],
|
|
|
|
FocusLens: String,
|
|
|
|
ModSlotPurchases: Number,
|
|
|
|
CustomizationSlotPurchases: Number,
|
|
|
|
UpgradeType: String,
|
|
|
|
UpgradeFingerprint: String,
|
|
|
|
ItemName: String,
|
|
|
|
InfestationDate: Date,
|
|
|
|
InfestationDays: Number,
|
|
|
|
InfestationType: String,
|
|
|
|
ModularParts: { type: [String], default: undefined },
|
|
|
|
UnlockLevel: Number,
|
|
|
|
Expiry: Date,
|
|
|
|
SkillTree: String,
|
|
|
|
ArchonCrystalUpgrades: { type: [ArchonCrystalUpgradeSchema], default: undefined }
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
2023-12-14 17:34:15 +01:00
|
|
|
|
2024-06-16 17:51:20 +02:00
|
|
|
EquipmentSchema.virtual("ItemId").get(function () {
|
2023-12-14 17:34:15 +01:00
|
|
|
return { $oid: this._id.toString() } satisfies IOid;
|
2023-06-14 02:26:19 +02:00
|
|
|
});
|
|
|
|
|
2024-06-16 17:51:20 +02:00
|
|
|
EquipmentSchema.set("toJSON", {
|
2023-12-14 17:34:15 +01:00
|
|
|
virtuals: true,
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
const boosterSchema = new Schema<IBooster>(
|
|
|
|
{
|
|
|
|
ExpiryDate: Number,
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2023-08-31 14:29:09 +04:00
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
const RawUpgrades = new Schema<IRawUpgrade>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
ItemCount: Number
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
RawUpgrades.virtual("LastAdded").get(function () {
|
|
|
|
return { $oid: this._id.toString() } satisfies IOid;
|
2023-09-06 14:02:54 +04:00
|
|
|
});
|
|
|
|
|
|
|
|
RawUpgrades.set("toJSON", {
|
2023-12-14 17:34:15 +01:00
|
|
|
virtuals: true,
|
2023-09-06 14:02:54 +04:00
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
//TODO: find out what this is
|
2024-06-16 17:51:20 +02:00
|
|
|
const upgradesSchema = new Schema(
|
2024-02-12 14:31:28 +01:00
|
|
|
{
|
|
|
|
UpgradeFingerprint: String,
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
2023-09-06 14:02:54 +04:00
|
|
|
|
2024-06-16 17:51:20 +02:00
|
|
|
upgradesSchema.virtual("ItemId").get(function () {
|
2024-02-12 14:31:28 +01:00
|
|
|
return toOid(this._id);
|
2023-12-14 17:34:15 +01:00
|
|
|
});
|
|
|
|
|
2024-06-16 17:51:20 +02:00
|
|
|
upgradesSchema.set("toJSON", {
|
2023-12-14 17:34:15 +01:00
|
|
|
virtuals: true,
|
2023-07-27 22:15:15 +02:00
|
|
|
transform(_document, returnedObject) {
|
2023-06-14 02:26:19 +02:00
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
const slotsBinSchema = new Schema<ISlots>(
|
|
|
|
{
|
|
|
|
Slots: Number,
|
|
|
|
Extra: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2023-06-14 02:26:19 +02:00
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
const FlavourItemSchema = new Schema(
|
|
|
|
{
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2023-06-04 03:06:22 +02:00
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
FlavourItemSchema.set("toJSON", {
|
2023-06-04 03:06:22 +02:00
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
// "Mailbox": { "LastInboxId": { "$oid": "123456780000000000000000" } }
|
|
|
|
const MailboxSchema = new Schema<IMailbox>(
|
2023-06-14 02:26:19 +02:00
|
|
|
{
|
2023-12-14 17:34:15 +01:00
|
|
|
LastInboxId: {
|
|
|
|
type: Schema.Types.ObjectId,
|
|
|
|
set: (v: IMailbox["LastInboxId"]) => v.$oid.toString()
|
|
|
|
}
|
2023-06-14 02:26:19 +02:00
|
|
|
},
|
2023-12-14 17:34:15 +01:00
|
|
|
{ id: false, _id: false }
|
2023-06-14 02:26:19 +02:00
|
|
|
);
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
MailboxSchema.set("toJSON", {
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject.__v;
|
|
|
|
//TODO: there is a lot of any here
|
|
|
|
returnedObject.LastInboxId = toOid(returnedObject.LastInboxId as Types.ObjectId);
|
|
|
|
}
|
2023-06-14 02:26:19 +02:00
|
|
|
});
|
|
|
|
|
2023-12-14 17:34:15 +01:00
|
|
|
const DuviriInfoSchema = new Schema<IDuviriInfo>(
|
|
|
|
{
|
|
|
|
Seed: Number,
|
|
|
|
NumCompletions: Number
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_id: false,
|
|
|
|
id: false
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
DuviriInfoSchema.set("toJSON", {
|
2023-07-27 22:15:15 +02:00
|
|
|
transform(_document, returnedObject) {
|
2023-06-14 02:26:19 +02:00
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
const TypeXPItemSchema = new Schema<ITypeXPItem>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
XP: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const challengeProgressSchema = new Schema<IChallengeProgress>(
|
|
|
|
{
|
|
|
|
Progress: Number,
|
|
|
|
Name: String,
|
|
|
|
Completed: [String]
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const notePacksSchema = new Schema<INotePacks>(
|
|
|
|
{
|
|
|
|
MELODY: String,
|
|
|
|
BASS: String,
|
|
|
|
PERCUSSION: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const StepSequencersSchema = new Schema<IStepSequencer>(
|
|
|
|
{
|
|
|
|
NotePacks: notePacksSchema,
|
|
|
|
FingerPrint: String,
|
|
|
|
Name: String
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
StepSequencersSchema.virtual("ItemId").get(function () {
|
|
|
|
return { $oid: this._id.toString() } satisfies IOid;
|
|
|
|
});
|
|
|
|
|
|
|
|
StepSequencersSchema.set("toJSON", {
|
|
|
|
virtuals: true,
|
|
|
|
transform(_document, returnedObject) {
|
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const affiliationsSchema = new Schema<IAffiliation>(
|
|
|
|
{
|
|
|
|
Initiated: Boolean,
|
|
|
|
Standing: Number,
|
|
|
|
Title: String,
|
|
|
|
FreeFavorsEarned: [Number],
|
|
|
|
FreeFavorsUsed: [Number],
|
|
|
|
Tag: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const completedJobChainsSchema = new Schema<ICompletedJobChain>(
|
|
|
|
{
|
|
|
|
LocationTag: String,
|
|
|
|
Jobs: [String]
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
2024-06-16 17:51:20 +02:00
|
|
|
const seasonChallengeHistorySchema = new Schema<ISeasonChallenge>(
|
2024-02-12 14:31:28 +01:00
|
|
|
{
|
|
|
|
challenge: String,
|
|
|
|
id: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
//TODO: check whether this is complete
|
|
|
|
const playerSkillsSchema = new Schema<IPlayerSkills>(
|
|
|
|
{
|
|
|
|
LPP_SPACE: Number,
|
|
|
|
LPP_DRIFTER: Number,
|
|
|
|
LPS_NONE: Number,
|
|
|
|
LPS_PILOTING: Number,
|
|
|
|
LPS_GUNNERY: Number,
|
|
|
|
LPS_TACTICAL: Number,
|
|
|
|
LPS_ENGINEERING: Number,
|
|
|
|
LPS_COMMAND: Number,
|
|
|
|
LPS_DRIFT_COMBAT: Number,
|
|
|
|
LPS_DRIFT_RIDING: Number,
|
|
|
|
LPS_DRIFT_OPPORTUNITY: Number,
|
|
|
|
LPS_DRIFT_ENDURANCE: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const settingsSchema = new Schema<ISettings>({
|
|
|
|
FriendInvRestriction: String,
|
|
|
|
GiftMode: String,
|
|
|
|
GuildInvRestriction: String,
|
|
|
|
ShowFriendInvNotifications: Boolean,
|
|
|
|
TradingRulesConfirmed: Boolean
|
|
|
|
});
|
|
|
|
|
|
|
|
const consumedSchuitsSchema = new Schema<IConsumedSuit>({
|
|
|
|
s: String,
|
|
|
|
c: colorSchema
|
|
|
|
});
|
|
|
|
|
2024-06-18 13:02:29 +02:00
|
|
|
const infestedFoundrySchema = new Schema<IInfestedFoundry>(
|
|
|
|
{
|
|
|
|
Name: String,
|
|
|
|
Resources: { type: [typeCountSchema], default: undefined },
|
|
|
|
Slots: Number,
|
|
|
|
XP: Number,
|
|
|
|
ConsumedSuits: { type: [consumedSchuitsSchema], default: undefined },
|
|
|
|
InvigorationIndex: Number,
|
|
|
|
InvigorationSuitOfferings: { type: [String], default: undefined },
|
|
|
|
InvigorationsApplied: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
const questProgressSchema = new Schema<IQuestProgress>({
|
|
|
|
c: Number,
|
|
|
|
i: Boolean,
|
|
|
|
m: Boolean,
|
|
|
|
b: []
|
|
|
|
});
|
|
|
|
|
|
|
|
const questKeysSchema = new Schema<IQuestKeyDatabase>(
|
|
|
|
{
|
|
|
|
Progress: [questProgressSchema],
|
|
|
|
unlock: Boolean,
|
|
|
|
Completed: Boolean,
|
|
|
|
//CustomData: Schema.Types.Mixed,
|
|
|
|
CompletionDate: Date,
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_id: false
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
questKeysSchema.set("toJSON", {
|
|
|
|
transform(_doc, ret, _options) {
|
|
|
|
const questKeysDatabase = ret as IQuestKeyDatabase;
|
|
|
|
|
|
|
|
if (questKeysDatabase.CompletionDate) {
|
|
|
|
(questKeysDatabase as IQuestKeyResponse).CompletionDate = toMongoDate(questKeysDatabase.CompletionDate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
|
|
|
|
|
|
|
|
const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
|
|
|
|
{
|
|
|
|
LongGuns: String,
|
|
|
|
Melee: String,
|
|
|
|
Pistols: String,
|
|
|
|
PistolsFeatures: Number,
|
|
|
|
PistolsModularParts: [String],
|
|
|
|
Suits: String,
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const weaponSkinsSchema = new Schema<IWeaponSkin>(
|
|
|
|
{
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
weaponSkinsSchema.virtual("ItemId").get(function () {
|
|
|
|
return { $oid: this._id.toString() };
|
|
|
|
});
|
|
|
|
|
|
|
|
weaponSkinsSchema.set("toJSON", { virtuals: true });
|
|
|
|
|
|
|
|
const tauntHistorySchema = new Schema<ITauntHistory>(
|
|
|
|
{
|
|
|
|
node: String,
|
|
|
|
state: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const periodicMissionCompletionsSchema = new Schema<IPeriodicMissionCompletionDatabase>(
|
|
|
|
{
|
|
|
|
date: Date,
|
|
|
|
tag: String,
|
|
|
|
count: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
periodicMissionCompletionsSchema.set("toJSON", {
|
|
|
|
transform(_doc, ret, _options) {
|
|
|
|
const periodicMissionCompletionDatabase = ret as IPeriodicMissionCompletionDatabase;
|
|
|
|
|
|
|
|
(periodicMissionCompletionDatabase as unknown as IPeriodicMissionCompletionResponse).date = toMongoDate(
|
|
|
|
periodicMissionCompletionDatabase.date
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const loreFragmentScansSchema = new Schema<ILoreFragmentScan>(
|
|
|
|
{
|
|
|
|
Progress: Number,
|
|
|
|
Region: String,
|
|
|
|
ItemType: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|
|
|
{
|
|
|
|
accountOwnerId: Schema.Types.ObjectId,
|
|
|
|
SubscribedToEmails: Number,
|
|
|
|
Created: Date,
|
|
|
|
RewardSeed: Number,
|
|
|
|
|
|
|
|
//Credit
|
|
|
|
RegularCredits: Number,
|
|
|
|
//Platinum
|
|
|
|
PremiumCredits: Number,
|
|
|
|
//Gift Platinum(Non trade)
|
|
|
|
PremiumCreditsFree: Number,
|
|
|
|
//Endo
|
|
|
|
FusionPoints: Number,
|
|
|
|
|
|
|
|
//Slots
|
|
|
|
SuitBin: slotsBinSchema,
|
|
|
|
WeaponBin: slotsBinSchema,
|
|
|
|
SentinelBin: slotsBinSchema,
|
|
|
|
SpaceSuitBin: slotsBinSchema,
|
|
|
|
SpaceWeaponBin: slotsBinSchema,
|
|
|
|
PvpBonusLoadoutBin: slotsBinSchema,
|
|
|
|
PveBonusLoadoutBin: slotsBinSchema,
|
|
|
|
RandomModBin: slotsBinSchema,
|
|
|
|
OperatorAmpBin: slotsBinSchema,
|
|
|
|
CrewShipSalvageBin: slotsBinSchema,
|
|
|
|
MechBin: slotsBinSchema,
|
|
|
|
CrewMemberBin: slotsBinSchema,
|
|
|
|
|
|
|
|
//How many trades do you have left
|
|
|
|
TradesRemaining: Number,
|
|
|
|
//How many Gift do you have left*(gift spends the trade)
|
|
|
|
GiftsRemaining: Number,
|
|
|
|
//Curent trade info Giving or Getting items
|
|
|
|
PendingTrades: [Schema.Types.Mixed],
|
|
|
|
|
2024-05-06 15:38:10 +02:00
|
|
|
//Syndicate currently being pledged to.
|
|
|
|
SupportedSyndicate: String,
|
2024-02-12 14:31:28 +01:00
|
|
|
//Curent Syndicates rank\exp
|
|
|
|
Affiliations: [affiliationsSchema],
|
|
|
|
//Syndicates Missions complate(Navigation->Syndicate)
|
|
|
|
CompletedSyndicates: [String],
|
|
|
|
//Daily Syndicates Exp
|
|
|
|
DailyAffiliation: Number,
|
|
|
|
DailyAffiliationPvp: Number,
|
|
|
|
DailyAffiliationLibrary: Number,
|
|
|
|
DailyAffiliationCetus: Number,
|
|
|
|
DailyAffiliationQuills: Number,
|
|
|
|
DailyAffiliationSolaris: Number,
|
|
|
|
DailyAffiliationVentkids: Number,
|
|
|
|
DailyAffiliationVox: Number,
|
|
|
|
DailyAffiliationEntrati: Number,
|
|
|
|
DailyAffiliationNecraloid: Number,
|
|
|
|
DailyAffiliationZariman: Number,
|
|
|
|
DailyAffiliationKahl: Number,
|
|
|
|
|
|
|
|
//Daily Focus limit
|
|
|
|
DailyFocus: Number,
|
|
|
|
//Focus XP per School
|
|
|
|
FocusXP: focusXPSchema,
|
|
|
|
//Curent active like Active school focuses is = "Zenurik"
|
|
|
|
FocusAbility: String,
|
|
|
|
//The treeways of the Focus school.(Active and passive Ability)
|
|
|
|
FocusUpgrades: [focusUpgradesSchema],
|
|
|
|
|
|
|
|
//Achievement
|
|
|
|
ChallengeProgress: [challengeProgressSchema],
|
|
|
|
|
|
|
|
//Account Item like Ferrite,Form,Kuva etc
|
|
|
|
MiscItems: [typeCountSchema],
|
|
|
|
|
|
|
|
//Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType")
|
|
|
|
RawUpgrades: [RawUpgrades],
|
|
|
|
//Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+""
|
2024-06-16 17:51:20 +02:00
|
|
|
Upgrades: [upgradesSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
//Warframe
|
2024-06-16 17:51:20 +02:00
|
|
|
Suits: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Primary Weapon
|
2024-06-16 17:51:20 +02:00
|
|
|
LongGuns: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Secondary Weapon
|
2024-06-16 17:51:20 +02:00
|
|
|
Pistols: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Melee Weapon
|
2024-06-16 17:51:20 +02:00
|
|
|
Melee: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Ability Weapon like Ultimate Mech\Excalibur\Ivara etc
|
2024-06-16 17:51:20 +02:00
|
|
|
SpecialItems: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//The Mandachord(Octavia) is a step sequencer
|
|
|
|
StepSequencers: [StepSequencersSchema],
|
|
|
|
|
|
|
|
//Sentinel(like Helios or modular)
|
2024-06-16 17:51:20 +02:00
|
|
|
Sentinels: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Any /Sentinels/SentinelWeapons/ (like warframe weapon)
|
2024-06-16 17:51:20 +02:00
|
|
|
SentinelWeapons: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Modular Pets
|
2024-06-16 17:51:20 +02:00
|
|
|
MoaPets: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
KubrowPetEggs: [Schema.Types.Mixed],
|
|
|
|
//Like PowerSuit Cat\Kubrow or etc Pets
|
2024-06-16 17:51:20 +02:00
|
|
|
KubrowPets: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Prints Cat(3 Prints)\Kubrow(2 Prints) Pets
|
|
|
|
KubrowPetPrints: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Item for EquippedGear example:Scaner,LoadoutTechSummon etc
|
|
|
|
Consumables: [typeCountSchema],
|
|
|
|
//Weel Emotes+Gear
|
|
|
|
EquippedEmotes: [String],
|
|
|
|
EquippedGear: [String],
|
|
|
|
//Equipped Shawzin
|
|
|
|
EquippedInstrument: String,
|
|
|
|
ReceivedStartingGear: Boolean,
|
|
|
|
|
|
|
|
//to use add SummonItem to Consumables+EquippedGear
|
|
|
|
//Archwing need Suits+Melee+Guns
|
2024-06-16 17:51:20 +02:00
|
|
|
SpaceSuits: [EquipmentSchema],
|
|
|
|
SpaceMelee: [EquipmentSchema],
|
|
|
|
SpaceGuns: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
ArchwingEnabled: Boolean,
|
|
|
|
//Mech need Suits+SpaceGuns+SpecialItem
|
2024-06-16 17:51:20 +02:00
|
|
|
MechSuits: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
///Restoratives/HoverboardSummon (like Suit)
|
2024-06-16 17:51:20 +02:00
|
|
|
Hoverboards: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
//Use Operator\Drifter
|
|
|
|
UseAdultOperatorLoadout: Boolean,
|
|
|
|
//Operator\Drifter Weapon
|
2024-06-16 17:51:20 +02:00
|
|
|
OperatorAmps: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Operator
|
|
|
|
OperatorLoadOuts: [operatorConfigSchema],
|
|
|
|
//Drifter
|
|
|
|
AdultOperatorLoadOuts: [operatorConfigSchema],
|
2024-06-16 17:51:20 +02:00
|
|
|
DrifterMelee: [EquipmentSchema],
|
|
|
|
DrifterGuns: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//ErsatzHorsePowerSuit
|
2024-06-16 17:51:20 +02:00
|
|
|
Horses: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
//LandingCraft like Liset
|
2024-02-18 13:58:43 +01:00
|
|
|
Ships: { type: [Schema.Types.ObjectId], ref: "Ships" },
|
2024-02-12 14:31:28 +01:00
|
|
|
// /Lotus/Types/Items/ShipDecos/
|
|
|
|
ShipDecorations: [typeCountSchema],
|
|
|
|
|
|
|
|
//RailJack Setting(Mods,Skin,Weapon,etc)
|
2024-06-16 17:51:20 +02:00
|
|
|
CrewShipHarnesses: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
//Railjack/Components(https://warframe.fandom.com/wiki/Railjack/Components)
|
|
|
|
CrewShipRawSalvage: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Default RailJack
|
|
|
|
CrewShips: [Schema.Types.Mixed],
|
|
|
|
CrewShipAmmo: [typeCountSchema],
|
|
|
|
CrewShipWeapons: [Schema.Types.Mixed],
|
|
|
|
CrewShipWeaponSkins: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//NPC Crew and weapon
|
|
|
|
CrewMembers: [Schema.Types.Mixed],
|
|
|
|
CrewShipSalvagedWeaponSkins: [Schema.Types.Mixed],
|
|
|
|
CrewShipSalvagedWeapons: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Complete Mission\Quests
|
|
|
|
Missions: [Schema.Types.Mixed],
|
|
|
|
QuestKeys: [questKeysSchema],
|
|
|
|
//item like DojoKey or Boss missions key
|
|
|
|
LevelKeys: [Schema.Types.Mixed],
|
|
|
|
//Active quests
|
|
|
|
Quests: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Cosmetics like profile glyphs\Kavasa Prime Kubrow Collar\Game Theme etc
|
|
|
|
FlavourItems: [FlavourItemSchema],
|
|
|
|
|
|
|
|
//Lunaro Weapon
|
2024-06-16 17:51:20 +02:00
|
|
|
Scoops: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
//Mastery Rank*(Need item XPInfo to rank up)
|
|
|
|
PlayerLevel: Number,
|
|
|
|
//Item Mastery Rank exp
|
|
|
|
XPInfo: [TypeXPItemSchema],
|
|
|
|
//Mastery Rank next availability
|
|
|
|
TrainingDate: Date,
|
|
|
|
//Retries rank up(3 time)
|
|
|
|
TrainingRetriesLeft: Number,
|
|
|
|
|
|
|
|
//you saw last played Region when you opened the star map
|
|
|
|
LastRegionPlayed: String,
|
|
|
|
|
|
|
|
//Blueprints for Foundry
|
|
|
|
Recipes: [typeCountSchema],
|
|
|
|
//Crafting Blueprint(Item Name + CompletionDate)
|
|
|
|
PendingRecipes: [pendingRecipeSchema],
|
|
|
|
|
|
|
|
//Skins for Suits, Weapons etc.
|
|
|
|
WeaponSkins: [weaponSkinsSchema],
|
|
|
|
|
|
|
|
//Ayatan Item
|
|
|
|
FusionTreasures: [fusionTreasuresSchema],
|
|
|
|
//"node": "TreasureTutorial", "state": "TS_COMPLETED"
|
|
|
|
TauntHistory: [tauntHistorySchema],
|
|
|
|
|
|
|
|
//noShow2FA,VisitPrimeVault etc
|
|
|
|
WebFlags: Schema.Types.Mixed,
|
|
|
|
//Id CompletedAlerts
|
|
|
|
CompletedAlerts: [String],
|
|
|
|
|
|
|
|
//Warframe\Duviri
|
|
|
|
StoryModeChoice: String,
|
|
|
|
|
|
|
|
//Alert->Kuva Siphon
|
|
|
|
PeriodicMissionCompletions: [periodicMissionCompletionsSchema],
|
|
|
|
|
|
|
|
//Codex->LoreFragment
|
|
|
|
LoreFragmentScans: [loreFragmentScansSchema],
|
|
|
|
|
|
|
|
//Resource,Credit,Affinity etc or Bless any boosters
|
|
|
|
Boosters: [boosterSchema],
|
|
|
|
BlessingCooldown: Date, // Date convert to IMongoDate
|
|
|
|
|
|
|
|
//the color your clan requests like Items/Research/DojoColors/DojoColorPlainsB
|
|
|
|
ActiveDojoColorResearch: String,
|
|
|
|
|
|
|
|
SentientSpawnChanceBoosters: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
QualifyingInvasions: [Schema.Types.Mixed],
|
|
|
|
FactionScores: [Number],
|
|
|
|
|
|
|
|
//Have only Suit+Pistols+LongGuns+Melee+ItemType(BronzeSpectre,GoldSpectre,PlatinumSpectreArmy,SilverSpectreArmy)
|
|
|
|
//"/Lotus/Types/Game/SpectreArmies/BronzeSpectreArmy": "Vapor Specter Regiment",
|
|
|
|
SpectreLoadouts: [spectreLoadoutsSchema],
|
|
|
|
//If you want change Spectre Gear id
|
|
|
|
PendingSpectreLoadouts: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//New Quest Email
|
|
|
|
EmailItems: [TypeXPItemSchema],
|
|
|
|
|
|
|
|
//Profile->Wishlist
|
|
|
|
Wishlist: [String],
|
|
|
|
|
|
|
|
//https://warframe.fandom.com/wiki/Alignment
|
|
|
|
//like "Alignment": { "Wisdom": 9, "Alignment": 1 },
|
|
|
|
Alignment: Schema.Types.Mixed,
|
|
|
|
AlignmentReplay: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
//https://warframe.fandom.com/wiki/Sortie
|
|
|
|
CompletedSorties: [String],
|
|
|
|
LastSortieReward: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Resource_Drone[Uselees stuff]
|
|
|
|
Drones: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Active profile ico
|
|
|
|
ActiveAvatarImageType: String,
|
|
|
|
|
|
|
|
// open location store like EidolonPlainsDiscoverable or OrbVallisCaveDiscoverable
|
|
|
|
DiscoveredMarkers: [Schema.Types.Mixed],
|
|
|
|
//Open location mission like "JobId" + "StageCompletions"
|
|
|
|
CompletedJobs: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Game mission\ivent score example "Tag": "WaterFight", "Best": 170, "Count": 1258,
|
|
|
|
PersonalGoalProgress: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Setting interface Style
|
|
|
|
ThemeStyle: String,
|
|
|
|
ThemeBackground: String,
|
|
|
|
ThemeSounds: String,
|
|
|
|
|
|
|
|
//Daily LoginRewards
|
|
|
|
LoginMilestoneRewards: [String],
|
|
|
|
|
|
|
|
//You first Dialog with NPC or use new Item
|
|
|
|
NodeIntrosCompleted: [String],
|
|
|
|
|
2024-05-04 15:42:25 +02:00
|
|
|
//Current guild id, if applicable.
|
|
|
|
GuildId: { type: Schema.Types.ObjectId, ref: "Guild" },
|
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
//https://warframe.fandom.com/wiki/Heist
|
|
|
|
//ProfitTaker(1-4) Example:"LocationTag": "EudicoHeists", "Jobs":Mission name
|
|
|
|
CompletedJobChains: [completedJobChainsSchema],
|
|
|
|
//Night Wave Challenge
|
|
|
|
SeasonChallengeHistory: [seasonChallengeHistorySchema],
|
|
|
|
|
|
|
|
//Cephalon Simaris Entries Example:"TargetType"+"Scans"(1-10)+"Completed": true|false
|
|
|
|
LibraryPersonalProgress: [Schema.Types.Mixed],
|
|
|
|
//Cephalon Simaris Daily Task
|
|
|
|
LibraryAvailableDailyTaskInfo: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
//https://warframe.fandom.com/wiki/Invasion
|
|
|
|
InvasionChainProgress: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//https://warframe.fandom.com/wiki/Parazon
|
2024-06-16 17:51:20 +02:00
|
|
|
DataKnives: [EquipmentSchema],
|
2024-02-12 14:31:28 +01:00
|
|
|
|
|
|
|
//CorpusLich or GrineerLich
|
|
|
|
NemesisAbandonedRewards: [String],
|
|
|
|
//CorpusLich\KuvaLich
|
|
|
|
NemesisHistory: [Schema.Types.Mixed],
|
|
|
|
LastNemesisAllySpawnTime: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
//TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social)
|
|
|
|
Settings: settingsSchema,
|
|
|
|
|
|
|
|
//Railjack craft
|
|
|
|
//https://warframe.fandom.com/wiki/Rising_Tide
|
|
|
|
PersonalTechProjects: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Modulars lvl and exp(Railjack|Duviri)
|
|
|
|
//https://warframe.fandom.com/wiki/Intrinsics
|
|
|
|
PlayerSkills: playerSkillsSchema,
|
|
|
|
|
|
|
|
//TradeBannedUntil data
|
|
|
|
TradeBannedUntil: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
//https://warframe.fandom.com/wiki/Helminth
|
|
|
|
InfestedFoundry: infestedFoundrySchema,
|
|
|
|
|
|
|
|
NextRefill: Schema.Types.Mixed, // Date, convert to IMongoDate
|
|
|
|
|
|
|
|
//Purchase this new permanent skin from the Lotus customization options in Personal Quarters located in your Orbiter.
|
|
|
|
//https://warframe.fandom.com/wiki/Lotus#The_New_War
|
|
|
|
LotusCustomization: Schema.Types.Mixed,
|
|
|
|
|
|
|
|
//Progress+Rank+ItemType(ZarimanPumpShotgun)
|
|
|
|
//https://warframe.fandom.com/wiki/Incarnon
|
|
|
|
EvolutionProgress: [Schema.Types.Mixed],
|
|
|
|
|
|
|
|
//Unknown and system
|
|
|
|
DuviriInfo: DuviriInfoSchema,
|
|
|
|
Mailbox: MailboxSchema,
|
|
|
|
KahlLoadOuts: [Schema.Types.Mixed],
|
|
|
|
HandlerPoints: Number,
|
|
|
|
ChallengesFixVersion: Number,
|
|
|
|
PlayedParkourTutorial: Boolean,
|
|
|
|
SubscribedToEmailsPersonalized: Number,
|
2024-06-20 11:48:12 +02:00
|
|
|
LastInventorySync: Schema.Types.Mixed, // this should be Schema.Types.ObjectId, but older inventories may break with that.
|
2024-02-12 14:31:28 +01:00
|
|
|
ActiveLandscapeTraps: [Schema.Types.Mixed],
|
|
|
|
RepVotes: [Schema.Types.Mixed],
|
|
|
|
LeagueTickets: [Schema.Types.Mixed],
|
|
|
|
HasContributedToDojo: Boolean,
|
|
|
|
HWIDProtectEnabled: Boolean,
|
|
|
|
LoadOutPresets: { type: Schema.Types.ObjectId, ref: "Loadout" },
|
|
|
|
CurrentLoadOutIds: [Schema.Types.Mixed],
|
|
|
|
RandomUpgradesIdentified: Number,
|
|
|
|
BountyScore: Number,
|
|
|
|
ChallengeInstanceStates: [Schema.Types.Mixed],
|
|
|
|
RecentVendorPurchases: [Schema.Types.Mixed],
|
|
|
|
Robotics: [Schema.Types.Mixed],
|
|
|
|
UsedDailyDeals: [Schema.Types.Mixed],
|
|
|
|
CollectibleSeries: [Schema.Types.Mixed],
|
|
|
|
HasResetAccount: Boolean,
|
|
|
|
|
|
|
|
//Discount Coupon
|
|
|
|
PendingCoupon: Schema.Types.Mixed,
|
|
|
|
//Like BossAladV,BossCaptainVor come for you on missions % chance
|
|
|
|
DeathMarks: [String],
|
|
|
|
//Zanuka
|
|
|
|
Harvestable: Boolean,
|
|
|
|
//Grustag three
|
|
|
|
DeathSquadable: Boolean
|
|
|
|
},
|
2024-06-20 11:48:12 +02:00
|
|
|
{ timestamps: { createdAt: "Created" } }
|
2024-02-12 14:31:28 +01:00
|
|
|
);
|
|
|
|
|
2023-06-04 03:06:22 +02:00
|
|
|
inventorySchema.set("toJSON", {
|
2023-06-05 04:16:49 +08:00
|
|
|
transform(_document, returnedObject) {
|
2023-06-04 03:06:22 +02:00
|
|
|
delete returnedObject._id;
|
|
|
|
delete returnedObject.__v;
|
2023-09-11 13:20:07 +02:00
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
const inventoryDatabase = returnedObject as IInventoryDatabase;
|
|
|
|
const inventoryResponse = returnedObject as IInventoryResponse;
|
2023-09-11 13:20:07 +02:00
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
inventoryResponse.TrainingDate = toMongoDate(inventoryDatabase.TrainingDate);
|
|
|
|
inventoryResponse.Created = toMongoDate(inventoryDatabase.Created);
|
2024-05-04 15:42:25 +02:00
|
|
|
if (inventoryDatabase.GuildId) {
|
|
|
|
inventoryResponse.GuildId = toOid(inventoryDatabase.GuildId);
|
|
|
|
}
|
2024-02-12 14:31:28 +01:00
|
|
|
if (inventoryResponse.BlessingCooldown) {
|
|
|
|
inventoryResponse.BlessingCooldown = toMongoDate(inventoryDatabase.BlessingCooldown);
|
|
|
|
}
|
2023-06-04 03:06:22 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
// type overwrites for subdocuments/subdocument arrays
|
2023-06-14 02:26:19 +02:00
|
|
|
type InventoryDocumentProps = {
|
2024-06-16 17:51:20 +02:00
|
|
|
Suits: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
LongGuns: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
Pistols: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
Melee: Types.DocumentArray<IEquipmentDatabase>;
|
2024-06-18 02:03:07 +02:00
|
|
|
OperatorAmps: Types.DocumentArray<IEquipmentDatabase>;
|
2023-09-05 07:37:30 -05:00
|
|
|
FlavourItems: Types.DocumentArray<IFlavourItem>;
|
|
|
|
RawUpgrades: Types.DocumentArray<IRawUpgrade>;
|
2024-05-29 16:18:41 +02:00
|
|
|
Upgrades: Types.DocumentArray<ICrewShipSalvagedWeaponSkin>;
|
2023-09-05 07:37:30 -05:00
|
|
|
MiscItems: Types.DocumentArray<IMiscItem>;
|
|
|
|
Boosters: Types.DocumentArray<IBooster>;
|
2023-12-14 17:34:15 +01:00
|
|
|
OperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>;
|
2024-06-16 17:51:20 +02:00
|
|
|
SpecialItems: Types.DocumentArray<IEquipmentDatabase>;
|
2024-01-25 14:49:45 +01:00
|
|
|
AdultOperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>; //TODO: this should still contain _id
|
2024-06-16 17:51:20 +02:00
|
|
|
MechSuits: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
Scoops: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
DataKnives: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
DrifterMelee: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
Sentinels: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
Horses: Types.DocumentArray<IEquipmentDatabase>;
|
2024-01-25 14:49:45 +01:00
|
|
|
PendingRecipes: Types.DocumentArray<IPendingRecipeDatabase>;
|
2024-06-19 17:46:12 +02:00
|
|
|
SpaceSuits: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
SpaceGuns: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
SpaceMelee: Types.DocumentArray<IEquipmentDatabase>;
|
|
|
|
SentinelWeapons: Types.DocumentArray<IEquipmentDatabase>;
|
2023-06-14 02:26:19 +02:00
|
|
|
};
|
|
|
|
|
2024-06-01 13:03:27 +02:00
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
2023-12-14 17:34:15 +01:00
|
|
|
type InventoryModelType = Model<IInventoryDatabase, {}, InventoryDocumentProps>;
|
2023-06-14 02:26:19 +02:00
|
|
|
|
2024-02-12 14:31:28 +01:00
|
|
|
export const Inventory = model<IInventoryDatabase, InventoryModelType>("Inventory", inventorySchema);
|