From 4ae17c4993a2c73af9c6e2c441c9dda71de8677d Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Wed, 18 Sep 2024 14:15:18 -0300 Subject: [PATCH] refactor: make getPubkeysBySearch() function return Set --- src/controllers/api/accounts.ts | 2 +- src/controllers/api/search.ts | 8 ++++---- src/utils/search.test.ts | 20 +++++++++++++------- src/utils/search.ts | 4 ++-- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/controllers/api/accounts.ts b/src/controllers/api/accounts.ts index f16f04e5..f27b20e1 100644 --- a/src/controllers/api/accounts.ts +++ b/src/controllers/api/accounts.ts @@ -137,7 +137,7 @@ const accountSearchController: AppController = async (c) => { } const followedPubkeys: Set = viewerPubkey ? await getFollowedPubkeys(viewerPubkey) : new Set(); - const pubkeys = (await getPubkeysBySearch(kysely, { q: query, limit, followedPubkeys })).slice(0, limit); + const pubkeys = Array.from(await getPubkeysBySearch(kysely, { q: query, limit, followedPubkeys })); let events = event ? [event] : await store.query([{ kinds: [0], authors: pubkeys, limit }], { signal, diff --git a/src/controllers/api/search.ts b/src/controllers/api/search.ts index 01977208..78b8990b 100644 --- a/src/controllers/api/search.ts +++ b/src/controllers/api/search.ts @@ -92,15 +92,15 @@ async function searchEvents( filter.authors = [account_id]; } - const pubkeys: string[] = []; + let pubkeys: Set = new Set(); if (type === 'accounts') { const kysely = await Storages.kysely(); const followedPubkeys: Set = viewerPubkey ? await getFollowedPubkeys(viewerPubkey) : new Set(); - pubkeys.push(...(await getPubkeysBySearch(kysely, { q, limit, followedPubkeys }))); + pubkeys = pubkeys.union(await getPubkeysBySearch(kysely, { q, limit, followedPubkeys })); if (!filter?.authors) { - filter.authors = pubkeys; + filter.authors = Array.from(pubkeys); } else { filter.authors.push(...pubkeys); } @@ -115,7 +115,7 @@ async function searchEvents( if (type !== 'accounts') return events; - events = pubkeys + events = Array.from(pubkeys) .map((pubkey) => events.find((event) => event.pubkey === pubkey)) .filter((event) => !!event); diff --git a/src/utils/search.test.ts b/src/utils/search.test.ts index 0621fdaa..1f01a157 100644 --- a/src/utils/search.test.ts +++ b/src/utils/search.test.ts @@ -11,11 +11,17 @@ Deno.test('fuzzy search works', async () => { search: 'patrickReiis patrickdosreis.com', }).execute(); - assertEquals(await getPubkeysBySearch(db.kysely, { q: 'pat rick', limit: 1, followedPubkeys: new Set() }), []); - assertEquals(await getPubkeysBySearch(db.kysely, { q: 'patrick dos reis', limit: 1, followedPubkeys: new Set() }), [ - '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', - ]); - assertEquals(await getPubkeysBySearch(db.kysely, { q: 'dosreis.com', limit: 1, followedPubkeys: new Set() }), [ - '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', - ]); + assertEquals(await getPubkeysBySearch(db.kysely, { q: 'pat rick', limit: 1, followedPubkeys: new Set() }), new Set()); + assertEquals( + await getPubkeysBySearch(db.kysely, { q: 'patrick dos reis', limit: 1, followedPubkeys: new Set() }), + new Set([ + '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', + ]), + ); + assertEquals( + await getPubkeysBySearch(db.kysely, { q: 'dosreis.com', limit: 1, followedPubkeys: new Set() }), + new Set([ + '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', + ]), + ); }); diff --git a/src/utils/search.ts b/src/utils/search.ts index 40d2676e..b0be761b 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -6,7 +6,7 @@ import { DittoTables } from '@/db/DittoTables.ts'; export async function getPubkeysBySearch( kysely: Kysely, opts: { q: string; limit: number; followedPubkeys: Set }, -) { +): Promise> { const { q, limit, followedPubkeys } = opts; let query = kysely @@ -28,5 +28,5 @@ export async function getPubkeysBySearch( const followingPubkeys = new Set((await query.execute()).map(({ pubkey }) => pubkey)); - return Array.from(followingPubkeys.union(pubkeys)); + return new Set(Array.from(followingPubkeys.union(pubkeys)).slice(0, limit)); }