mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
refactor: make getPubkeysBySearch() function return Set<string>
This commit is contained in:
parent
f1c0d8c18f
commit
4ae17c4993
4 changed files with 20 additions and 14 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
]);
|
]),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue