diff --git a/backend/src/data/GuildSavedMessages.ts b/backend/src/data/GuildSavedMessages.ts index 6d1e29c5..0747ca6d 100644 --- a/backend/src/data/GuildSavedMessages.ts +++ b/backend/src/data/GuildSavedMessages.ts @@ -8,6 +8,7 @@ import { MINUTES, SECONDS } from "../utils"; import { BaseGuildRepository } from "./BaseGuildRepository"; import { cleanupMessages } from "./cleanup/messages"; import { ISavedMessageData, SavedMessage } from "./entities/SavedMessage"; +import { buildEntity } from "./buildEntity"; if (!isAPI()) { const CLEANUP_INTERVAL = 5 * MINUTES; @@ -220,7 +221,8 @@ export class GuildSavedMessages extends BaseGuildRepository { throw e; } - const inserted = await this.messages.findOne(data.id); + // perf: save a db lookup and message content decryption by building the entity manually + const inserted = buildEntity(SavedMessage, data); this.events.emit("create", [inserted]); this.events.emit(`create:${data.id}`, [inserted]); } diff --git a/backend/src/data/buildEntity.ts b/backend/src/data/buildEntity.ts new file mode 100644 index 00000000..c174efc4 --- /dev/null +++ b/backend/src/data/buildEntity.ts @@ -0,0 +1,7 @@ +export function buildEntity(Entity: new () => T, data: Partial): T { + const instance = new Entity(); + for (const [key, value] of Object.entries(data)) { + instance[key] = value; + } + return instance; +}