refactor: make getPubkeysBySearch() function return Set<string>

This commit is contained in:
P. Reis 2024-09-18 14:15:18 -03:00
parent f1c0d8c18f
commit 4ae17c4993
4 changed files with 20 additions and 14 deletions

View file

@ -137,7 +137,7 @@ const accountSearchController: AppController = async (c) => {
} }
const followedPubkeys: Set<string> = viewerPubkey ? await getFollowedPubkeys(viewerPubkey) : new Set(); const followedPubkeys: Set<string> = 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 }], { let events = event ? [event] : await store.query([{ kinds: [0], authors: pubkeys, limit }], {
signal, signal,

View file

@ -92,15 +92,15 @@ async function searchEvents(
filter.authors = [account_id]; filter.authors = [account_id];
} }
const pubkeys: string[] = []; let pubkeys: Set<string> = new Set();
if (type === 'accounts') { if (type === 'accounts') {
const kysely = await Storages.kysely(); const kysely = await Storages.kysely();
const followedPubkeys: Set<string> = viewerPubkey ? await getFollowedPubkeys(viewerPubkey) : new Set(); const followedPubkeys: Set<string> = 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) { if (!filter?.authors) {
filter.authors = pubkeys; filter.authors = Array.from(pubkeys);
} else { } else {
filter.authors.push(...pubkeys); filter.authors.push(...pubkeys);
} }
@ -115,7 +115,7 @@ async function searchEvents(
if (type !== 'accounts') return events; if (type !== 'accounts') return events;
events = pubkeys events = Array.from(pubkeys)
.map((pubkey) => events.find((event) => event.pubkey === pubkey)) .map((pubkey) => events.find((event) => event.pubkey === pubkey))
.filter((event) => !!event); .filter((event) => !!event);

View file

@ -11,11 +11,17 @@ Deno.test('fuzzy search works', async () => {
search: 'patrickReiis patrickdosreis.com', search: 'patrickReiis patrickdosreis.com',
}).execute(); }).execute();
assertEquals(await getPubkeysBySearch(db.kysely, { q: 'pat rick', limit: 1, followedPubkeys: new Set() }), []); 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() }), [ assertEquals(
await getPubkeysBySearch(db.kysely, { q: 'patrick dos reis', limit: 1, followedPubkeys: new Set() }),
new Set([
'47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4',
]); ]),
assertEquals(await getPubkeysBySearch(db.kysely, { q: 'dosreis.com', limit: 1, followedPubkeys: new Set() }), [ );
assertEquals(
await getPubkeysBySearch(db.kysely, { q: 'dosreis.com', limit: 1, followedPubkeys: new Set() }),
new Set([
'47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4', '47259076c85f9240e852420d7213c95e95102f1de929fb60f33a2c32570c98c4',
]); ]),
);
}); });

View file

@ -6,7 +6,7 @@ import { DittoTables } from '@/db/DittoTables.ts';
export async function getPubkeysBySearch( export async function getPubkeysBySearch(
kysely: Kysely<DittoTables>, kysely: Kysely<DittoTables>,
opts: { q: string; limit: number; followedPubkeys: Set<string> }, opts: { q: string; limit: number; followedPubkeys: Set<string> },
) { ): Promise<Set<string>> {
const { q, limit, followedPubkeys } = opts; const { q, limit, followedPubkeys } = opts;
let query = kysely let query = kysely
@ -28,5 +28,5 @@ export async function getPubkeysBySearch(
const followingPubkeys = new Set((await query.execute()).map(({ pubkey }) => pubkey)); 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));
} }