From 24d909fd28383fda2f10934e7246483fe1be52ff Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Fri, 13 Sep 2024 10:34:15 -0300 Subject: [PATCH] feat: create script to populate author_search table --- deno.json | 3 ++- scripts/db-populate-search.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 scripts/db-populate-search.ts diff --git a/deno.json b/deno.json index 699ab620..0070b142 100644 --- a/deno.json +++ b/deno.json @@ -18,7 +18,8 @@ "stats:recompute": "deno run -A scripts/stats-recompute.ts", "soapbox": "curl -O https://dl.soapbox.pub/main/soapbox.zip && mkdir -p public && mv soapbox.zip public/ && cd public/ && unzip -o soapbox.zip && rm soapbox.zip", "trends": "deno run -A scripts/trends.ts", - "clean:deps": "deno cache --reload src/app.ts" + "clean:deps": "deno cache --reload src/app.ts", + "db:populate-search": "deno run -A scripts/db-populate-search.ts" }, "unstable": ["cron", "ffi", "kv", "worker-options"], "exclude": ["./public"], diff --git a/scripts/db-populate-search.ts b/scripts/db-populate-search.ts new file mode 100644 index 00000000..9c698c8f --- /dev/null +++ b/scripts/db-populate-search.ts @@ -0,0 +1,35 @@ +import { NSchema as n } from '@nostrify/nostrify'; +import { Storages } from '@/storages.ts'; +import { DittoTables } from '@/db/DittoTables.ts'; + +const kysely = await Storages.kysely(); +const stream = kysely + .selectFrom('nostr_events') + .select(['pubkey', 'content']) + .where('kind', '=', 0) + .stream(); + +const values: DittoTables['author_search'][] = []; + +for await (const author of stream) { + const { name, nip05 } = n.json().pipe(n.metadata()).catch({}).parse(author.content); + const search = [name, nip05].filter(Boolean).join(' ').trim(); + + values.push({ + pubkey: author.pubkey, + search, + }); +} + +try { + await kysely.insertInto('author_search').values(values).onConflict( + (oc) => + oc.column('pubkey') + .doUpdateSet((eb) => ({ search: eb.ref('excluded.search') })), + ) + .execute(); +} catch { + // do nothing +} + +Deno.exit();