aboutsummaryrefslogtreecommitdiffstats
path: root/lib/migrate.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-09-13 23:18:20 -0700
committerAdam Soltys <[email protected]>2024-09-13 23:18:20 -0700
commitfb9b4cc39df1608aa1a04286408f03e244f8f15f (patch)
tree40fd6c4f4ba0a9b1237f90225be8f1c89cf4e49b /lib/migrate.ts
parent183315347b3ce6d4057abe05861c39f5d4b1aa46 (diff)
downloadcoinos-server-fb9b4cc39df1608aa1a04286408f03e244f8f15f.tar.gz
coinos-server-fb9b4cc39df1608aa1a04286408f03e244f8f15f.zip
add default account if missing
Diffstat (limited to 'lib/migrate.ts')
-rw-r--r--lib/migrate.ts19
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/migrate.ts b/lib/migrate.ts
index 8896f54b..2d7f83f7 100644
--- a/lib/migrate.ts
+++ b/lib/migrate.ts
@@ -14,13 +14,20 @@ async function migrate(id) {
if (typeof user === "string") user = await g(`user:${user}`);
if (user) {
- let accounts = await db.lLen(`${user.id}:accounts`);
- if (!accounts) {
- await s(`account:${user.id}`, { id: user.id });
- await db.lPush(`${user.id}:accounts`, user.id);
- }
+ let k = `lock:${user.id}:accounts`;
+ const lock = await db.set(k, "1", { NX: true, PX: 5000 });
+ if (!lock) return user;
+ try {
+ let accounts = await db.lLen(`${user.id}:accounts`);
- return user;
+ if (!accounts) {
+ await db.set(`account:${user.id}`, JSON.stringify({ id: user.id }));
+ await db.lPush(`${user.id}:accounts`, user.id);
+ }
+ return user;
+ } finally {
+ await db.del(k);
+ }
}
user = await ga(`user:${id}`);