From bd7e598b1b05064cd0895f8b647fd4b644b6a399 Mon Sep 17 00:00:00 2001 From: Alessandro Cifani Date: Thu, 23 May 2024 16:01:50 +0200 Subject: [PATCH] feat: get single account with balance --- actual.ts | 23 +++++++++++++++++++++++ routes.ts | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/actual.ts b/actual.ts index 0bf34f3..78dc7b8 100644 --- a/actual.ts +++ b/actual.ts @@ -18,6 +18,29 @@ export async function getAccounts() { return api.getAccounts(); } +export async function getAccount(id: string) { + const accounts = await api.getAccounts(); + const account = accounts.find((a: any) => a.id === id); + if (!account) { + return null; + } + + const balance = await getAccountBalance(id); + return { ...account, balance }; +} + +export async function getAccountBalance( + accountID: string, +): Promise { + const query = api + .q('transactions') + .filter({ account: accountID }) + .select({ amount: { $sum: '$amount' } }); + const { data } = await api.runQuery(query); + + return data?.[0]?.amount ?? null; +} + export async function getTransactions(accountID: string) { return api.getTransactions(accountID); } diff --git a/routes.ts b/routes.ts index 1f4fabc..61b8c98 100644 --- a/routes.ts +++ b/routes.ts @@ -34,6 +34,11 @@ router.get('/accounts', async (_, res) => { res.status(200).json(accounts); }); +router.get('/accounts/:accountid', async (req, res) => { + const account = await actual.getAccount(req.params.accountid); + res.status(200).json(account); +}); + router.get( '/accounts/:accountid/transactions', async (req, res, next) => {