aboutsummaryrefslogtreecommitdiffstats
path: root/routes/users.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-12-29 16:07:13 -0800
committerAdam Soltys <[email protected]>2022-12-29 16:07:13 -0800
commit0f20d1cb0ca5a65ff6ae5fc4bb97657fc7ba4ee5 (patch)
tree4292426bcf7337e6f2b22f1dc4113e7a3f32716c /routes/users.js
parent33bfa7d2d4d74f4724d117ad58a825253e53d321 (diff)
downloadcoinos-server-0f20d1cb0ca5a65ff6ae5fc4bb97657fc7ba4ee5.tar.gz
coinos-server-0f20d1cb0ca5a65ff6ae5fc4bb97657fc7ba4ee5.zip
follower query caching
Diffstat (limited to 'routes/users.js')
-rw-r--r--routes/users.js63
1 files changed, 29 insertions, 34 deletions
diff --git a/routes/users.js b/routes/users.js
index 19060f9f..e40f1b7e 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -22,7 +22,7 @@ import lq from "$lib/liquid";
import { emit } from "$lib/sockets";
import register from "$lib/register";
import { requirePin } from "$lib/utils";
-import { coinos } from "$lib/nostr";
+import { coinos, q } from "$lib/nostr";
const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {});
@@ -630,45 +630,40 @@ app.get("/contacts", auth, async function(req, res) {
app.post("/checkPassword", auth, async function(req, res) {
try {
- let { user } = req;
- let result = await bcrypt.compare(req.body.password, user.password);
- if (!result) throw new Error();
- res.send(result);
- } catch(e) {
+ let { user } = req;
+ let result = await bcrypt.compare(req.body.password, user.password);
+ if (!result) throw new Error();
+ res.send(result);
+ } catch (e) {
res.code(500).send("Invalid password");
- }
+ }
});
-let since = {};
app.get("/:pubkey/follows", async (req, res) => {
try {
let { pubkey } = req.params;
let { tagsonly } = req.query;
- store.fetching[pubkey] = true;
- store.timeouts[pubkey] = setTimeout(
- () => (store.fetching[pubkey] = false),
- 500
- );
-
let sub = `${pubkey}:follows`;
- coinos.subscribe(sub, {
- since: since[sub],
+ await q(sub, {
limit: 1,
kinds: [3],
authors: [pubkey]
});
- since[sub] = Math.round(Date.now() / 1000);
-
- await wait(() => !store.fetching[pubkey], 100, 10);
-
let tags = JSON.parse(await redis.get(`${pubkey}:follows`)) || [];
if (tagsonly) return res.send(tags);
let follows = [];
for (let f of tags) {
let [_, pubkey] = f;
+
+ await q(`${pubkey}:profile:f1`, {
+ limit: 1,
+ kinds: [0],
+ authors: [pubkey]
+ });
+
let user = JSON.parse(await redis.get(`user:${pubkey}`));
if (user) follows.push(user);
}
@@ -679,7 +674,7 @@ app.get("/:pubkey/follows", async (req, res) => {
res.send(follows);
} catch (e) {
console.log(e);
- res.code(500).send(e.message);
+ res.code(500).send(e && e.message);
}
});
@@ -687,28 +682,28 @@ app.get("/:pubkey/followers", async (req, res) => {
try {
let { pubkey } = req.params;
- store.fetching[pubkey] = true;
- store.timeouts[pubkey] = setTimeout(
- () => (store.fetching[pubkey] = false),
- 500
- );
-
let sub = `${pubkey}:followers`;
- coinos.subscribe(sub, {
- since: since[sub],
+ await q(sub, {
kinds: [3],
"#p": [pubkey]
});
- since[sub] = Math.round(Date.now() / 1000);
-
- await wait(() => !store.fetching[pubkey], 100, 10);
-
let pubkeys = await redis.sMembers(`${pubkey}:followers`);
let followers = [];
+
for (let pubkey of pubkeys) {
let user = JSON.parse(await redis.get(`user:${pubkey}`));
+ if (!user || !user.updated) {
+ await q(`${pubkey}:profile:f2`, {
+ limit: 1,
+ kinds: [0],
+ authors: [pubkey]
+ });
+
+ user = JSON.parse(await redis.get(`user:${pubkey}`));
+ }
+
if (user) followers.push(user);
}
@@ -718,6 +713,6 @@ app.get("/:pubkey/followers", async (req, res) => {
res.send(followers);
} catch (e) {
console.log(e);
- res.code(500).send(e.message);
+ res.code(500).send(e && e.message);
}
});