diff options
| author | Adam Soltys <[email protected]> | 2026-02-04 23:13:33 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-02-06 09:00:09 -0800 |
| commit | 1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb (patch) | |
| tree | 960318969072afa63536e9429c27fa40ca2919d3 /lib/migrate.ts | |
| parent | c0481268da25eed1f25281508b5c4777d26c2b03 (diff) | |
| download | coinos-server-1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb.tar.gz coinos-server-1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb.zip | |
tigerbeetle
Diffstat (limited to 'lib/migrate.ts')
| -rw-r--r-- | lib/migrate.ts | 58 |
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; |
