Add stats:recompute script

This commit is contained in:
Alex Gleason 2024-05-14 15:55:19 -05:00
parent 0a79ecb0a3
commit dc87d3599d
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
2 changed files with 38 additions and 1 deletions

View File

@ -10,7 +10,8 @@
"check": "deno check src/server.ts",
"nsec": "deno run scripts/nsec.ts",
"admin:event": "deno run -A scripts/admin-event.ts",
"admin:role": "deno run -A scripts/admin-role.ts"
"admin:role": "deno run -A scripts/admin-role.ts",
"stats:recompute": "deno run -A scripts/stats-recompute.ts"
},
"unstable": ["ffi", "kv"],
"exclude": ["./public"],

View File

@ -0,0 +1,36 @@
import { nip19 } from 'nostr-tools';
import { db } from '@/db.ts';
import { DittoTables } from '@/db/DittoTables.ts';
import { Storages } from '@/storages.ts';
let pubkey: string;
try {
const result = nip19.decode(Deno.args[0]);
if (result.type === 'npub') {
pubkey = result.data;
} else {
throw new Error('Invalid npub');
}
} catch {
console.error('Invalid npub');
Deno.exit(1);
}
const [followList] = await Storages.db.query([{ kinds: [3], authors: [pubkey], limit: 1 }]);
const authorStats: DittoTables['author_stats'] = {
pubkey,
followers_count: (await Storages.db.count([{ kinds: [3], '#p': [pubkey] }])).count,
following_count: followList?.tags.filter(([name]) => name === 'p')?.length ?? 0,
notes_count: (await Storages.db.count([{ kinds: [1], authors: [pubkey] }])).count,
};
await db.insertInto('author_stats')
.values(authorStats)
.onConflict((oc) =>
oc
.column('pubkey')
.doUpdateSet(authorStats)
)
.execute();