From eb6fe3397efe1ae7ebc71204ce0650cfa62f755c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 10 Jun 2024 17:57:39 -0400 Subject: [PATCH] refactor: User.getUidsByUserslugs, so it works with multiple slugs --- src/user/index.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/user/index.js b/src/user/index.js index b82af2bd08..1afb94c778 100644 --- a/src/user/index.js +++ b/src/user/index.js @@ -126,7 +126,36 @@ User.getUidByUserslug = async function (userslug) { }; User.getUidsByUserslugs = async function (userslugs) { - return await db.sortedSetScores('userslug:uid', userslugs); + const apSlugs = userslugs.filter(slug => slug.includes('@')); + const normalSlugs = userslugs.filter(slug => !slug.includes('@')); + const slugToUid = Object.create(null); + async function getApSlugs() { + await Promise.all(apSlugs.map(slug => activitypub.actors.assert(slug))); + const apUids = await db.getObjectFields( + 'handle:uid', + apSlugs.map(slug => String(slug).toLowerCase()), + ); + return apUids; + } + + const [apUids, normalUids] = await Promise.all([ + apSlugs.length ? getApSlugs() : [], + normalSlugs.length ? db.sortedSetScores('userslug:uid', normalSlugs) : [], + ]); + + apSlugs.forEach((slug) => { + if (apUids[slug]) { + slugToUid[slug] = apUids[slug]; + } + }); + + normalSlugs.forEach((slug, i) => { + if (normalUids[i]) { + slugToUid[slug] = normalUids[i]; + } + }); + + return userslugs.map(slug => slugToUid[slug] || null); }; User.getUsernamesByUids = async function (uids) {