feat: update multiple balances

This commit is contained in:
Max Koon
2025-10-15 12:04:45 -04:00
parent 415150d58e
commit 1551d39978
6 changed files with 147 additions and 6 deletions

View File

@@ -23,8 +23,8 @@ import { getHono } from "./hono";
import { Configuration, CountryCode, PlaidApi, PlaidEnvironments, Products } from "plaid";
import { randomUUID } from "crypto";
import { db } from "./db";
import { plaidAccessTokens, plaidLink, transaction } from "@money/shared/db";
import { eq } from "drizzle-orm";
import { balance, plaidAccessTokens, plaidLink, transaction } from "@money/shared/db";
import { asc, desc, eq, sql } from "drizzle-orm";
const configuration = new Configuration({
@@ -118,11 +118,39 @@ const createMutators = (authData: AuthData | null) => {
id: randomUUID(),
user_id: authData.user.id,
name: t.name,
amount: t.amount,
amount: t.amount.toString(),
});
}
}
},
async updateBalences() {
isLoggedIn(authData);
const accounts = await db.query.plaidAccessTokens.findMany({
where: eq(plaidAccessTokens.userId, authData.user.id),
});
if (accounts.length == 0) {
console.error("No accounts");
return;
}
for (const account of accounts) {
const { data } = await plaidClient.accountsBalanceGet({
access_token: account.token
});
await db.insert(balance).values(data.accounts.map(bal => ({
id: randomUUID(),
user_id: authData.user.id,
plaid_id: bal.account_id,
avaliable: bal.balances.available as any,
current: bal.balances.current as any,
name: bal.name,
}))).onConflictDoUpdate({
target: balance.plaid_id,
set: { current: sql.raw(`excluded.${balance.current.name}`), avaliable: sql.raw(`excluded.${balance.avaliable.name}`) }
})
}
},
}
} as const satisfies Mutators;
}