feat: automatically delete death mark messages after 24 hours #1535

Merged
Sainan merged 2 commits from deathmark-expiry into main 2025-04-10 07:16:30 -07:00
2 changed files with 8 additions and 6 deletions

View File

@ -5,7 +5,7 @@ import { IMongoDate, IOid } from "@/src/types/commonTypes";
import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
export interface IMessageClient export interface IMessageClient
extends Omit<IMessageDatabase, "_id" | "date" | "startDate" | "endDate" | "ownerId" | "attVisualOnly"> { extends Omit<IMessageDatabase, "_id" | "date" | "startDate" | "endDate" | "ownerId" | "attVisualOnly" | "expiry"> {
_id?: IOid; _id?: IOid;
date: IMongoDate; date: IMongoDate;
startDate?: IMongoDate; startDate?: IMongoDate;
@ -16,6 +16,8 @@ export interface IMessageClient
export interface IMessageDatabase extends IMessage { export interface IMessageDatabase extends IMessage {
ownerId: Types.ObjectId; ownerId: Types.ObjectId;
date: Date; //created at date: Date; //created at
attVisualOnly?: boolean;
expiry?: Date;
_id: Types.ObjectId; _id: Types.ObjectId;
} }
@ -30,7 +32,6 @@ export interface IMessage {
endDate?: Date; endDate?: Date;
att?: string[]; att?: string[];
countedAtt?: ITypeCount[]; countedAtt?: ITypeCount[];
attVisualOnly?: boolean;
transmission?: string; transmission?: string;
arg?: Arg[]; arg?: Arg[];
gifts?: IGift[]; gifts?: IGift[];
@ -137,14 +138,14 @@ messageSchema.virtual("messageId").get(function (this: IMessageDatabase) {
messageSchema.set("toJSON", { messageSchema.set("toJSON", {
virtuals: true, virtuals: true,
transform(_document, returnedObject) { transform(_document, returnedObject) {
delete returnedObject.ownerId;
const messageDatabase = returnedObject as IMessageDatabase; const messageDatabase = returnedObject as IMessageDatabase;
const messageClient = returnedObject as IMessageClient; const messageClient = returnedObject as IMessageClient;
delete returnedObject._id; delete returnedObject._id;
delete returnedObject.__v; delete returnedObject.__v;
delete returnedObject.ownerId;
delete returnedObject.attVisualOnly; delete returnedObject.attVisualOnly;
delete returnedObject.expiry;
messageClient.date = toMongoDate(messageDatabase.date); messageClient.date = toMongoDate(messageDatabase.date);
@ -157,5 +158,6 @@ messageSchema.set("toJSON", {
}); });
messageSchema.index({ ownerId: 1 }); messageSchema.index({ ownerId: 1 });
messageSchema.index({ expiry: 1 }, { expireAfterSeconds: 0 });
export const Inbox = model<IMessageDatabase>("Inbox", messageSchema, "inbox"); export const Inbox = model<IMessageDatabase>("Inbox", messageSchema, "inbox");

View File

@ -372,10 +372,10 @@ export const addMissionInventoryUpdates = async (
sndr: "/Lotus/Language/G1Quests/DeathMarkSender", sndr: "/Lotus/Language/G1Quests/DeathMarkSender",
msg: "/Lotus/Language/G1Quests/DeathMarkMessage", msg: "/Lotus/Language/G1Quests/DeathMarkMessage",
icon: "/Lotus/Interface/Icons/Npcs/Stalker_d.png", icon: "/Lotus/Interface/Icons/Npcs/Stalker_d.png",
highPriority: true highPriority: true,
expiry: new Date(Date.now() + 86400_000) // TOVERIFY: This type of inbox message seems to automatically delete itself. We'll just delete it after 24 hours, but it's clear if this is correct.
} }
]); ]);
// TODO: This type of inbox message seems to automatically delete itself. Figure out under which conditions.
} }
} }
inventory.DeathMarks = value; inventory.DeathMarks = value;