diff options
| author | Adam Soltys <[email protected]> | 2024-10-10 16:05:15 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-10 16:05:15 -0700 |
| commit | 17656bfe7346bfb1c948e3c82d9960b5a795621f (patch) | |
| tree | 923a715595296fa959bd84ae13e7495ce448254e | |
| parent | 0de0e3ba3719333f3884aeff26992adf1688c6ec (diff) | |
| download | coinos-server-17656bfe7346bfb1c948e3c82d9960b5a795621f.tar.gz coinos-server-17656bfe7346bfb1c948e3c82d9960b5a795621f.zip | |
follow counts
| -rw-r--r-- | lib/nostr.ts | 40 | ||||
| -rw-r--r-- | lib/utils.ts | 11 | ||||
| -rw-r--r-- | routes/nostr.ts | 3 |
3 files changed, 44 insertions, 10 deletions
diff --git a/lib/nostr.ts b/lib/nostr.ts index 234312df..10817c71 100644 --- a/lib/nostr.ts +++ b/lib/nostr.ts @@ -146,15 +146,39 @@ export let anon = (pubkey) => ({ }); export let getCount = async (pubkey) => { - let filter: any = { kinds: [3], "#p": [pubkey] }; - let ev = await pool.get([config.nostr], filter, opts); let created_at; + let filter: any = { kinds: [3], authors: [pubkey] }; + let ev = await pool.get([config.nostr], filter, opts); + + if (!ev) { + let { relays } = config; + ({ write: relays } = await getRelays(pubkey)); + + filter = { kinds: [3], authors: [pubkey] }; + ev = await pool.get(relays, filter, opts); + send(ev); + } + + if (ev) ({ created_at } = ev); + + let follows = 0; + let cache = await g(`${pubkey}:follows:n`); + if (cache && cache.t >= created_at) ({ follows } = cache); + else { + follows = ev.tags + .map((t) => t[0] === "p" && t[1]) + .filter((p) => p && p.length === 64).length; + await s(`${pubkey}:follows:n`, { follows, t: created_at }); + } + + filter = { kinds: [3], "#p": [pubkey] }; + ev = await pool.get([config.nostr], filter, opts); if (ev) ({ created_at } = ev); - let count = 0; - let cache = await g(`${pubkey}:followers:n`); + let followers = 0; + cache = await g(`${pubkey}:followers:n`); - if (cache && cache.t >= created_at) ({ count } = cache); + if (cache && cache.t >= created_at) ({ followers } = cache); else { let filter: any = { cache: ["user_infos", { pubkeys: [pubkey] }] }; let infos = await pool.querySync([config.cache], filter, opts); @@ -163,10 +187,10 @@ export let getCount = async (pubkey) => { let counts = {}; if (f) { counts = JSON.parse(f.content); - count = counts[pubkey]; - await s(`${pubkey}:count`, { count, t: created_at }); + followers = counts[pubkey]; + await s(`${pubkey}:followers:n`, { followers, t: created_at }); } } - return count; + return { follows, followers }; }; diff --git a/lib/utils.ts b/lib/utils.ts index a805f343..7bcb4a3d 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -168,3 +168,14 @@ export function formatReceipt(items, currency) { } export let t = ({ language = "en" }) => locales[language]; + +export let time = (() => { + let count = 0, started = false; + return () => { + if (!started) { + console.time(''); + started = true; + } + console.timeLog('', ++count); + }; +})(); diff --git a/routes/nostr.ts b/routes/nostr.ts index fa20aa43..f03af265 100644 --- a/routes/nostr.ts +++ b/routes/nostr.ts @@ -164,8 +164,7 @@ export default { async count(req, res) { try { let { pubkey } = req.params; - let count = await getCount(pubkey); - res.send(count); + res.send(await getCount(pubkey)); } catch (e) { bail(res, e.message); } |
