From 4b2f6371a360d1089d22fade19e7ca7a93812aa0 Mon Sep 17 00:00:00 2001 From: Carlo Date: Sun, 21 Nov 2021 18:36:30 +0100 Subject: [PATCH] feat: accounts are returned sorted by usage --- backend/config/index.ts | 3 ++- backend/helpers/get-accounts-sorted.ts | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 backend/helpers/get-accounts-sorted.ts diff --git a/backend/config/index.ts b/backend/config/index.ts index 377ac2a..1e565cd 100644 --- a/backend/config/index.ts +++ b/backend/config/index.ts @@ -1,4 +1,5 @@ import { filename, readFile } from '../dal'; +import getAccountsSorted from '../helpers/get-accounts-sorted'; export default function (fastify, opts, done) { const routes = [ @@ -9,7 +10,7 @@ export default function (fastify, opts, done) { const data = await readFile(); return { file: filename, - accounts: data.accounts, + accounts: getAccountsSorted(data.transactions), commodities: data.commodities, }; }, diff --git a/backend/helpers/get-accounts-sorted.ts b/backend/helpers/get-accounts-sorted.ts new file mode 100644 index 0000000..d5de5cd --- /dev/null +++ b/backend/helpers/get-accounts-sorted.ts @@ -0,0 +1,21 @@ +import { Transaction } from 'pta-journal'; + +type Temp = { k: string; n: number }; + +function getAccountsSorted(trxs: Transaction[]): string[] { + const obj = trxs + .flatMap((trx) => trx.entries.map((entry) => entry.account)) + .reduce((acc, cur) => { + acc[cur] = (acc[cur] || 0) + 1; + return acc; + }, {} as Record); + + let a: Temp[] = []; + for (let k in obj) { + a.push({ k: k, n: obj[k] }); + } + + return a.sort((a, b) => b.n - a.n).map((a) => a.k); +} + +export default getAccountsSorted;