Add Inbox

This commit is contained in:
Master 2023-06-08 13:57:26 +08:00
parent 0c745aa1d7
commit d12eb67248
6 changed files with 153 additions and 34 deletions

View File

@ -1,7 +1,38 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import inbox from "@/static/fixed_responses/inbox.json"; import inbox from "@/static/fixed_responses/inbox.json";
import { Inbox } from "@/src/models/inboxModel";
import { DeleteInbox, UpdateInbox } from "@/src/services/inboxService";
import { parseString } from "@/src/helpers/general";
const inboxController: RequestHandler = (_req, res) => { // eslint-disable-next-line @typescript-eslint/no-misused-promises
const inboxController: RequestHandler = async (req, res) => {
const accountId = req.query["accountId"];
const deleteId = req.query["deleteId"];
const messageId = req.query["messageId"];
const lastMessage = req.query["lastMessage"];
if (!deleteId && !messageId && !lastMessage) {
const inbox = await Inbox.find({ OwnerId: accountId });
if (!inbox) {
res.status(400).json({ error: "inbox was undefined" });
return;
}
res.json({ Inbox: inbox });
return;
}
if (deleteId && !messageId && !lastMessage) {
const newInbox = await DeleteInbox(parseString(accountId), parseString(messageId));
res.json({ Inbox: newInbox });
return;
}
if (!deleteId && messageId && !lastMessage) {
const newInbox = await UpdateInbox(parseString(accountId), parseString(messageId));
res.json({ Inbox: newInbox });
return;
}
if (!deleteId && !messageId && lastMessage) {
console.log(lastMessage);
}
res.json(inbox); res.json(inbox);
}; };

43
src/models/inboxModel.ts Normal file
View File

@ -0,0 +1,43 @@
import { model, Schema } from "mongoose";
import { IInboxDocument } from "../types/inboxTypes";
import { ODate, Oid } from "../types/commonTypes";
const databaseInboxSchema = new Schema<IInboxDocument>({
OwnerId: String,
globaUpgradeId: String,
sndr: String,
sub: String,
msg: String,
att: [String],
icon: String,
url: String,
highPriority: Boolean,
lowPrioNewPlayers: Boolean,
CrossPlatform: Boolean,
date: Number,
startDate: Number,
endDate: Number,
r: Boolean
});
databaseInboxSchema.set("toJSON", {
transform(_document, returnedObject) {
returnedObject.messageId = _document._id.toString();
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
returnedObject._id = { $oid: returnedObject._id.toString() } satisfies Oid;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
returnedObject.date = { $date: { $numberLong: returnedObject.date.toString() } } satisfies ODate;
if (returnedObject.startDate)
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
returnedObject.startDate = { $date: { $numberLong: returnedObject.startDate.toString() } } satisfies ODate;
if (returnedObject.endDate)
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
returnedObject.endDate = { $date: { $numberLong: returnedObject.endDate.toString() } } satisfies ODate;
delete returnedObject.OwnerId;
delete returnedObject.__v;
}
});
const Inbox = model<IInboxDocument>("Inbox", databaseInboxSchema);
export { Inbox };

View File

@ -0,0 +1,17 @@
import { Inbox } from "../models/inboxModel";
const UpdateInbox = async (accountId: string, messageId: string) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const inbox = await Inbox.findOne({ _id: messageId });
if (inbox) inbox.r = true;
if (inbox) await inbox.updateOne(inbox);
return await Inbox.find({ OwnerId: accountId });
};
const DeleteInbox = async (accountId: string, messageId: string) => {
const inbox = await Inbox.findOne({ _id: messageId });
if (inbox) await inbox.deleteOne();
return await Inbox.find({ OwnerId: accountId });
};
export { UpdateInbox, DeleteInbox };

View File

@ -1,3 +1,7 @@
export interface Oid { export interface Oid {
$oid: string; $oid: string;
} }
export interface ODate {
$date: { $numberLong: string };
}

28
src/types/inboxTypes.ts Normal file
View File

@ -0,0 +1,28 @@
import { Document } from "mongoose";
import { Oid } from "./commonTypes";
export interface IInboxDocument extends IInboxDatabase, Document {
Id: Oid;
MessageId: string;
}
export interface IInboxDatabase extends IInboxResponse {
OwnerId: string;
}
export interface IInboxResponse {
globaUpgradeId?: Oid;
sndr: string;
sub: string;
msg: string;
att?: string[];
icon: string;
url?: string;
highPriority: boolean;
lowPrioNewPlayers?: boolean;
CrossPlatform?: boolean;
date: number;
startDate?: number;
endDate?: number;
r?: boolean;
}

View File

@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { Document, Types } from "mongoose"; import { Document, Types } from "mongoose";
import { Oid } from "./commonTypes"; import { ODate, Oid } from "./commonTypes";
export interface IInventoryDatabase extends IInventoryResponse { export interface IInventoryDatabase extends IInventoryResponse {
accountOwnerId: Types.ObjectId; accountOwnerId: Types.ObjectId;
@ -9,7 +9,7 @@ export interface IInventoryDatabase extends IInventoryResponse {
export interface IInventoryResponse { export interface IInventoryResponse {
SubscribedToEmails: number; SubscribedToEmails: number;
Created: Date; Created: ODate;
RewardSeed: number; RewardSeed: number;
RegularCredits: number; RegularCredits: number;
PremiumCredits: number; PremiumCredits: number;
@ -53,7 +53,7 @@ export interface IInventoryResponse {
Recipes: Consumable[]; Recipes: Consumable[];
WeaponSkins: WeaponSkin[]; WeaponSkins: WeaponSkin[];
PendingRecipes: PendingRecipe[]; PendingRecipes: PendingRecipe[];
TrainingDate: Date; TrainingDate: ODate;
PlayerLevel: number; PlayerLevel: number;
Upgrades: CrewShipSalvagedWeaponSkin[]; Upgrades: CrewShipSalvagedWeaponSkin[];
EquippedGear: string[]; EquippedGear: string[];
@ -130,7 +130,7 @@ export interface IInventoryResponse {
InvasionChainProgress: InvasionChainProgress[]; InvasionChainProgress: InvasionChainProgress[];
DataKnives: DataKnife[]; DataKnives: DataKnife[];
NemesisHistory: NemesisHistory[]; NemesisHistory: NemesisHistory[];
LastNemesisAllySpawnTime: Date; LastNemesisAllySpawnTime: ODate;
Settings: Settings; Settings: Settings;
PersonalTechProjects: PersonalTechProject[]; PersonalTechProjects: PersonalTechProject[];
CrewShips: CrewShip[]; CrewShips: CrewShip[];
@ -141,7 +141,7 @@ export interface IInventoryResponse {
CrewShipWeapons: CrewShipWeapon[]; CrewShipWeapons: CrewShipWeapon[];
CrewShipSalvagedWeapons: CrewShipWeapon[]; CrewShipSalvagedWeapons: CrewShipWeapon[];
CrewShipWeaponSkins: CrewShipSalvagedWeaponSkin[]; CrewShipWeaponSkins: CrewShipSalvagedWeaponSkin[];
TradeBannedUntil: Date; TradeBannedUntil: ODate;
PlayedParkourTutorial: boolean; PlayedParkourTutorial: boolean;
SubscribedToEmailsPersonalized: number; SubscribedToEmailsPersonalized: number;
MechBin: CrewMemberBinClass; MechBin: CrewMemberBinClass;
@ -149,7 +149,7 @@ export interface IInventoryResponse {
DailyAffiliationNecraloid: number; DailyAffiliationNecraloid: number;
MechSuits: MechSuit[]; MechSuits: MechSuit[];
InfestedFoundry: InfestedFoundry; InfestedFoundry: InfestedFoundry;
BlessingCooldown: Date; BlessingCooldown: ODate;
CrewMemberBin: CrewMemberBinClass; CrewMemberBin: CrewMemberBinClass;
CrewShipHarnesses: CrewShipHarness[]; CrewShipHarnesses: CrewShipHarness[];
CrewShipRawSalvage: Consumable[]; CrewShipRawSalvage: Consumable[];
@ -161,7 +161,7 @@ export interface IInventoryResponse {
NemesisAbandonedRewards: string[]; NemesisAbandonedRewards: string[];
DailyAffiliationKahl: number; DailyAffiliationKahl: number;
LastInventorySync: Oid; LastInventorySync: Oid;
NextRefill: Date; NextRefill: ODate;
ActiveLandscapeTraps: any[]; ActiveLandscapeTraps: any[];
EvolutionProgress: any[]; EvolutionProgress: any[];
RepVotes: any[]; RepVotes: any[];
@ -213,10 +213,6 @@ export interface Alignment {
Alignment: number; Alignment: number;
} }
export interface Date {
$date: { $numberLong: string };
}
export interface Booster { export interface Booster {
ExpiryDate: number; ExpiryDate: number;
ItemType: string; ItemType: string;
@ -277,7 +273,7 @@ export interface CrewMember {
ItemType: string; ItemType: string;
NemesisFingerprint: number; NemesisFingerprint: number;
Seed: number; Seed: number;
HireDate: Date; HireDate: ODate;
AssignedRole: number; AssignedRole: number;
SkillEfficiency: SkillEfficiency; SkillEfficiency: SkillEfficiency;
WeaponConfigIdx: number; WeaponConfigIdx: number;
@ -447,7 +443,7 @@ export interface Drone {
ItemType: string; ItemType: string;
CurrentHP: number; CurrentHP: number;
ItemId: Oid; ItemId: Oid;
RepairStart?: Date; RepairStart?: ODate;
} }
export interface EmailItem { export interface EmailItem {
@ -535,7 +531,7 @@ export interface InvasionChainProgress {
export interface KubrowPetEgg { export interface KubrowPetEgg {
ItemType: KubrowPetEggItemType; ItemType: KubrowPetEggItemType;
ExpirationDate: Date; ExpirationDate: ODate;
ItemId: Oid; ItemId: Oid;
} }
@ -588,7 +584,7 @@ export interface KubrowPet {
Polarized?: number; Polarized?: number;
Polarity?: Polarity[]; Polarity?: Polarity[];
Features?: number; Features?: number;
InfestationDate?: Date; InfestationDate?: ODate;
InfestationDays?: number; InfestationDays?: number;
InfestationType?: string; InfestationType?: string;
ItemId: Oid; ItemId: Oid;
@ -608,7 +604,7 @@ export interface Details {
HasCollar: boolean; HasCollar: boolean;
PrintsRemaining: number; PrintsRemaining: number;
Status: Status; Status: Status;
HatchDate: Date; HatchDate: ODate;
DominantTraits: Traits; DominantTraits: Traits;
RecessiveTraits: Traits; RecessiveTraits: Traits;
IsMale: boolean; IsMale: boolean;
@ -812,7 +808,7 @@ export interface Mission {
Completes: number; Completes: number;
Tier?: number; Tier?: number;
Tag: string; Tag: string;
RewardsCooldownTime?: Date; RewardsCooldownTime?: ODate;
} }
export interface MoaPet { export interface MoaPet {
@ -837,7 +833,7 @@ export interface NemesisHistory {
BirthNode: BirthNode; BirthNode: BirthNode;
Rank: number; Rank: number;
k: boolean; k: boolean;
d: Date; d: ODate;
GuessHistory?: number[]; GuessHistory?: number[];
currentGuess?: number; currentGuess?: number;
Traded?: boolean; Traded?: boolean;
@ -891,13 +887,13 @@ export interface AbilityOverride {
} }
export interface PendingCoupon { export interface PendingCoupon {
Expiry: Date; Expiry: ODate;
Discount: number; Discount: number;
} }
export interface PendingRecipe { export interface PendingRecipe {
ItemType: string; ItemType: string;
CompletionDate: Date; CompletionDate: ODate;
ItemId: Oid; ItemId: Oid;
} }
@ -956,7 +952,7 @@ export enum GivingSlotOrderInfo {
} }
export interface PeriodicMissionCompletion { export interface PeriodicMissionCompletion {
date: Date; date: ODate;
tag: string; tag: string;
count?: number; count?: number;
} }
@ -975,7 +971,7 @@ export interface PersonalTechProject {
ReqCredits: number; ReqCredits: number;
ItemType: string; ItemType: string;
ReqItems: Consumable[]; ReqItems: Consumable[];
CompletionDate?: Date; CompletionDate?: ODate;
ItemId: Oid; ItemId: Oid;
ProductCategory?: string; ProductCategory?: string;
CategoryItemId?: Oid; CategoryItemId?: Oid;
@ -996,7 +992,7 @@ export interface QuestKey {
unlock?: boolean; unlock?: boolean;
Completed?: boolean; Completed?: boolean;
ItemType: string; ItemType: string;
CompletionDate?: Date; CompletionDate?: ODate;
} }
export interface Progress { export interface Progress {
@ -1170,7 +1166,7 @@ export interface ISuitDatabase {
Configs: SuitConfig[]; Configs: SuitConfig[];
UpgradeVer?: number; UpgradeVer?: number;
XP?: number; XP?: number;
InfestationDate?: Date; InfestationDate?: ODate;
Features?: number; Features?: number;
Polarity?: Polarity[]; Polarity?: Polarity[];
Polarized?: number; Polarized?: number;
@ -1215,15 +1211,15 @@ export interface WebFlags {
activeBuyPlat: number; activeBuyPlat: number;
noShow2FA: boolean; noShow2FA: boolean;
Tennocon2018Digital: boolean; Tennocon2018Digital: boolean;
VisitPrimeAccess: Date; VisitPrimeAccess: ODate;
VisitTennocon2019: Date; VisitTennocon2019: ODate;
enteredSC2019: Date; enteredSC2019: ODate;
VisitPrimeVault: Date; VisitPrimeVault: ODate;
VisitBuyPlatinum: Date; VisitBuyPlatinum: ODate;
ClickedSku_640_Page__en_buyplatinum: Date; ClickedSku_640_Page__en_buyplatinum: ODate;
ClickedSku_640_Page__buyplatinum: Date; ClickedSku_640_Page__buyplatinum: ODate;
VisitStarterPack: Date; VisitStarterPack: ODate;
Tennocon2020Digital: boolean; Tennocon2020Digital: boolean;
Anniversary2021: boolean; Anniversary2021: boolean;
HitDownloadBtn: Date; HitDownloadBtn: ODate;
} }