mirror of
https://github.com/actualbudget/actual.git
synced 2026-04-28 18:40:34 -05:00
Add a field with all transactions to /nordigen/transactions endpoint (#190)
Helps with actualbudget/actual#919 by adding the `all` field wit both pending and booked transactions to the output of `getTransactionsWithBalance()` and, by extension, the `/nordigen/transactions` endpoint. I could alter the `getTransactions()` to return the `all` field as well but I figured that keeping it such that it returns the output from Nordigen API 1:1 might be better so I left it as is. If you don't agree, let me know and I'll update this.
This commit is contained in:
@@ -151,7 +151,7 @@ app.post(
|
||||
balances,
|
||||
institutionId,
|
||||
startingBalance,
|
||||
transactions: { booked, pending },
|
||||
transactions: { booked, pending, all },
|
||||
} = await nordigenService.getTransactionsWithBalance(
|
||||
requisitionId,
|
||||
accountId,
|
||||
@@ -169,6 +169,7 @@ app.post(
|
||||
transactions: {
|
||||
booked,
|
||||
pending,
|
||||
all,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ export interface IBank {
|
||||
/**
|
||||
* Function sorts an array of transactions from newest to oldest
|
||||
*/
|
||||
sortTransactions: (transactions: Transaction[]) => Transaction[];
|
||||
sortTransactions: <T extends Transaction>(transactions: T[]) => T[];
|
||||
|
||||
/**
|
||||
* Calculates account balance before which was before transactions provided in sortedTransactions param
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
Institution,
|
||||
Transactions,
|
||||
Balance,
|
||||
Transaction,
|
||||
} from './nordigen-node.types.js';
|
||||
|
||||
export type DetailedAccount = Omit<NordigenAccountDetails, 'status'> &
|
||||
@@ -11,6 +12,7 @@ export type DetailedAccount = Omit<NordigenAccountDetails, 'status'> &
|
||||
export type DetailedAccountWithInstitution = DetailedAccount & {
|
||||
institution: Institution;
|
||||
};
|
||||
export type TransactionWithBookedStatus = Transaction & { booked: boolean };
|
||||
|
||||
export type NormalizedAccountDetails = {
|
||||
/**
|
||||
|
||||
@@ -170,7 +170,7 @@ export const nordigenService = {
|
||||
* @throws {RateLimitError}
|
||||
* @throws {UnknownError}
|
||||
* @throws {ServiceError}
|
||||
* @returns {Promise<{iban: string, balances: Array<import('../nordigen-node.types.js').Balance>, institutionId: string, transactions: {booked: Array<import('../nordigen-node.types.js').Transaction>, pending: Array<import('../nordigen-node.types.js').Transaction>}, startingBalance: number}>}
|
||||
* @returns {Promise<{iban: string, balances: Array<import('../nordigen-node.types.js').Balance>, institutionId: string, transactions: {booked: Array<import('../nordigen-node.types.js').Transaction>, pending: Array<import('../nordigen-node.types.js').Transaction>, all: Array<import('../nordigen.types.js').TransactionWithBookedStatus>}, startingBalance: number}>}
|
||||
*/
|
||||
getTransactionsWithBalance: async (
|
||||
requisitionId,
|
||||
@@ -202,6 +202,13 @@ export const nordigenService = {
|
||||
const sortedPendingTransactions = bank.sortTransactions(
|
||||
transactions.transactions?.pending,
|
||||
);
|
||||
const allTransactions = sortedBookedTransactions.map((t) => {
|
||||
return { ...t, booked: true };
|
||||
});
|
||||
sortedPendingTransactions.forEach((t) =>
|
||||
allTransactions.push({ ...t, booked: false }),
|
||||
);
|
||||
const sortedAllTransactions = bank.sortTransactions(allTransactions);
|
||||
|
||||
const startingBalance = bank.calculateStartingBalance(
|
||||
sortedBookedTransactions,
|
||||
@@ -216,6 +223,7 @@ export const nordigenService = {
|
||||
transactions: {
|
||||
booked: sortedBookedTransactions,
|
||||
pending: sortedPendingTransactions,
|
||||
all: sortedAllTransactions,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -173,6 +173,24 @@ describe('nordigenService', () => {
|
||||
institutionId: mockRequisition.institution_id,
|
||||
startingBalance: expect.any(Number),
|
||||
transactions: {
|
||||
all: expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
bookingDate: expect.any(String),
|
||||
transactionAmount: {
|
||||
amount: expect.any(String),
|
||||
currency: 'EUR',
|
||||
},
|
||||
transactionId: expect.any(String),
|
||||
valueDate: expect.any(String),
|
||||
}),
|
||||
expect.objectContaining({
|
||||
transactionAmount: {
|
||||
amount: expect.any(String),
|
||||
currency: 'EUR',
|
||||
},
|
||||
valueDate: expect.any(String),
|
||||
}),
|
||||
]),
|
||||
booked: expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
bookingDate: expect.any(String),
|
||||
|
||||
6
upcoming-release-notes/190.md
Normal file
6
upcoming-release-notes/190.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
category: Enhancements
|
||||
authors: [Jackenmen]
|
||||
---
|
||||
|
||||
Add an `all` field to /nordigen/transactions endpoint with ordered array of both booked and pending transactions
|
||||
Reference in New Issue
Block a user