aboutsummaryrefslogtreecommitdiffstats
path: root/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-12-28 15:05:56 -0800
committerAdam Soltys <[email protected]>2022-12-28 15:05:56 -0800
commit33d8a7d5235281d705bc1ac27113e150b2b9c617 (patch)
tree2d37343db785e4d1cfc54fed193c8db545359797 /routes
parent581a905b2fc14240d0bcbe6e2c14023fae3589a4 (diff)
downloadcoinos-server-33d8a7d5235281d705bc1ac27113e150b2b9c617.tar.gz
coinos-server-33d8a7d5235281d705bc1ac27113e150b2b9c617.zip
fix follows and followers endpoints
Diffstat (limited to 'routes')
-rw-r--r--routes/events.js5
-rw-r--r--routes/users.js54
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);