diff options
| author | Adam Soltys <[email protected]> | 2022-12-28 15:05:56 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-12-28 15:05:56 -0800 |
| commit | 33d8a7d5235281d705bc1ac27113e150b2b9c617 (patch) | |
| tree | 2d37343db785e4d1cfc54fed193c8db545359797 /routes | |
| parent | 581a905b2fc14240d0bcbe6e2c14023fae3589a4 (diff) | |
| download | coinos-server-33d8a7d5235281d705bc1ac27113e150b2b9c617.tar.gz coinos-server-33d8a7d5235281d705bc1ac27113e150b2b9c617.zip | |
fix follows and followers endpoints
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/events.js | 5 | ||||
| -rw-r--r-- | routes/users.js | 54 |
2 files changed, 42 insertions, 17 deletions
diff --git a/routes/events.js b/routes/events.js index 63189f70..3f42fead 100644 --- a/routes/events.js +++ b/routes/events.js @@ -23,7 +23,7 @@ app.get("/nostr/:pubkey", async (req, res) => { }); } - if (!user) user = { username: pubkey.substr(0, 6), pubkey, anon: true }; + if (!user) user = { username: pubkey.substr(0, 6), pubkey, anon: true, follows: [], followers: [] }; let { since } = user; @@ -33,6 +33,9 @@ app.get("/nostr/:pubkey", async (req, res) => { authors: [pubkey] }); + coinos.subscribe(`${pubkey}:followers`, { since, kinds: [3], "#p": [pubkey] }); + + user.since = Math.round(Date.now() / 1000); await redis.set(`user:${pubkey}`, JSON.stringify(user)); diff --git a/routes/users.js b/routes/users.js index 7a01f25e..d19e42ea 100644 --- a/routes/users.js +++ b/routes/users.js @@ -3,7 +3,7 @@ import redis from "$lib/redis"; import config from "$config"; import store from "$lib/store"; import { auth, optionalAuth } from "$lib/passport"; -import { getUser, wait } from "$lib/utils"; +import { getUser, uniq, wait } from "$lib/utils"; import axios from "axios"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; @@ -99,9 +99,23 @@ app.get("/users/:username", async (req, res) => { ) }); + if (user) user = user.get({ plain: true }); + else user = JSON.parse(await redis.get(`user:${username}`)); + + if (!user && username.length === 64) { + let newuser = { + username: username.substr(0, 6), + pubkey: username, + anon: true, + follows: [], + followers: [] + }; + + user = JSON.parse(await redis.get(`user:${newuser.pubkey}`)) || newuser; + } + if (!user) return res.code(500).send("User not found"); - user = user.get({ plain: true }); let { pubkey } = user; if (pubkey) { @@ -125,6 +139,7 @@ app.get("/users/:username", async (req, res) => { res.send(user); } catch (e) { + console.log(e); res.code(500).send(e.message); } }); @@ -668,15 +683,19 @@ app.post("/checkPassword", auth, async function(req, res) { app.get("/:pubkey/follows", async (req, res) => { try { let { pubkey } = req.params; - let follows = JSON.parse(await redis.get(`${pubkey}:follows`)) || []; + let tags = JSON.parse(await redis.get(`${pubkey}:follows`)) || []; - if (follows.length) { - follows = await db.User.findAll({ - where: { pubkey: follows.map(t => t[1]) } - }); - - res.send(follows); + let follows = []; + for (let f of tags) { + let [_, pubkey] = f; + let user = JSON.parse(await redis.get(`user:${pubkey}`)); + if (user) follows.push(user); } + + follows = uniq(follows, e => e.pubkey); + follows.sort((a, b) => a.username.localeCompare(b.username)); + + res.send(follows); } catch (e) { console.log(e); res.code(500).send(e.message); @@ -686,15 +705,18 @@ app.get("/:pubkey/follows", async (req, res) => { app.get("/:pubkey/followers", async (req, res) => { try { let { pubkey } = req.params; - let followers = await redis.sMembers(`${pubkey}:followers`); + let pubkeys = await redis.sMembers(`${pubkey}:followers`); - if (followers.length) { - followers = await db.User.findAll({ - where: { pubkey: followers } - }); - - res.send(followers); + let followers = []; + for (let pubkey of pubkeys) { + let user = JSON.parse(await redis.get(`user:${pubkey}`)); + if (user) followers.push(user); } + + followers = uniq(followers, e => e.pubkey); + followers.sort((a, b) => a.username.localeCompare(b.username)); + + res.send(followers); } catch (e) { console.log(e); res.code(500).send(e.message); |
