From fe165dd4d38e37675c76912684fdd0866d3fec8c Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sat, 14 Oct 2023 17:39:47 +0200 Subject: [PATCH] [backend] Cache mention uri in resolveMentionWithFallback --- packages/backend/src/remote/resolve-user.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/remote/resolve-user.ts b/packages/backend/src/remote/resolve-user.ts index 442bd5b7b..b1cb5ca13 100644 --- a/packages/backend/src/remote/resolve-user.ts +++ b/packages/backend/src/remote/resolve-user.ts @@ -13,6 +13,7 @@ import { IMentionedRemoteUsers } from "@/models/entities/note.js"; const logger = remoteLogger.createSubLogger("resolve-user"); const uriHostCache = new Cache("resolveUserUriHost", 60 * 60 * 24); +const mentionUriCache = new Cache("resolveMentionUserUri", 60 * 60 * 72); export async function resolveUser( username: string, @@ -188,14 +189,16 @@ export async function resolveMentionWithFallback(username: string, host: string if (cached) return cached.url ?? cached.uri; if ((host === null && objectHost === null) || host === config.domain) return fallback; - try { - const user = await resolveUser(username, host ?? objectHost, false); - const profile = await UserProfiles.findOneBy({ userId: user.id }); - return profile?.url ?? user.uri ?? fallback; - } - catch { - return fallback; - } + return mentionUriCache.fetch(fallback, async () => { + try { + const user = await resolveUser(username, host ?? objectHost, false); + const profile = await UserProfiles.findOneBy({ userId: user.id }); + return profile?.url ?? user.uri ?? fallback; + } + catch { + return fallback; + } + }); } export async function getSubjectHostFromUri(uri: string): Promise {