aboutsummaryrefslogtreecommitdiffstats
path: root/lib/migrate.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-02-04 23:13:33 -0800
committerAdam Soltys <[email protected]>2026-02-06 09:00:09 -0800
commit1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb (patch)
tree960318969072afa63536e9429c27fa40ca2919d3 /lib/migrate.ts
parentc0481268da25eed1f25281508b5c4777d26c2b03 (diff)
downloadcoinos-server-1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb.tar.gz
coinos-server-1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb.zip
tigerbeetle
Diffstat (limited to 'lib/migrate.ts')
-rw-r--r--lib/migrate.ts58
1 files changed, 57 insertions, 1 deletions
diff --git a/lib/migrate.ts b/lib/migrate.ts
index 8fd4ec1a..fe804107 100644
--- a/lib/migrate.ts
+++ b/lib/migrate.ts
@@ -1,6 +1,13 @@
import { db, g, s } from "$lib/db";
import { findLastUsedIndex, parseDescriptor } from "$lib/esplora";
-import { warn } from "$lib/logging";
+import { l, warn } from "$lib/logging";
+import {
+ createBalanceAccount,
+ createCreditAccounts,
+ tbSetBalance,
+ tbSetPending,
+ tbSetCredit,
+} from "$lib/tb";
async function migrate(id) {
const k = id?.replace(/\s/g, "").toLowerCase();
@@ -49,4 +56,53 @@ export const migrateAccounts = async () => {
return migrated;
};
+export const migrateBalancesToTB = async () => {
+ const migrated = await db.get("tb:migrated");
+ if (migrated) return 0;
+
+ let count = 0;
+
+ // Migrate balance:* keys
+ for await (const k of db.scanIterator({ MATCH: "balance:*" })) {
+ try {
+ const id = k.split(":")[1];
+ const balance = Number.parseInt((await db.get(k)) || "0");
+ await createBalanceAccount(id);
+ if (balance > 0) await tbSetBalance(id, balance);
+ count++;
+ } catch (e) {
+ warn("failed to migrate balance", k, e.message);
+ }
+ }
+
+ // Migrate pending:* keys
+ for await (const k of db.scanIterator({ MATCH: "pending:*" })) {
+ try {
+ const id = k.split(":")[1];
+ const pending = Number.parseInt((await db.get(k)) || "0");
+ if (pending > 0) await tbSetPending(id, pending);
+ } catch (e) {
+ warn("failed to migrate pending", k, e.message);
+ }
+ }
+
+ // Migrate credit:*:* keys
+ for await (const k of db.scanIterator({ MATCH: "credit:*:*" })) {
+ try {
+ const parts = k.split(":");
+ const type = parts[1];
+ const uid = parts[2];
+ const amount = Number.parseInt((await db.get(k)) || "0");
+ await createCreditAccounts(uid);
+ if (amount > 0) await tbSetCredit(uid, type, amount);
+ } catch (e) {
+ warn("failed to migrate credit", k, e.message);
+ }
+ }
+
+ await db.set("tb:migrated", Date.now().toString());
+ l(`Migrated ${count} balances to TigerBeetle`);
+ return count;
+};
+
export default migrate;