Browse Source

Calculate net worth and total account balance

pull/2574/head
Thomas 2 years ago
parent
commit
c10729be30
  1. 49
      apps/api/src/app/portfolio/portfolio.service.ts

49
apps/api/src/app/portfolio/portfolio.service.ts

@ -1139,10 +1139,26 @@ export class PortfolioService {
{ filters, user } { filters, user }
); );
const accountBalanceItems: HistoricalDataItem[] = let accountBalanceItems: HistoricalDataItem[] = Object.values(
accountBalances.balances.map(({ date, valueInBaseCurrency }) => { // Reduce the array to a map with unique dates as keys
return { date: format(date, DATE_FORMAT), value: valueInBaseCurrency }; accountBalances.balances.reduce(
}); (
map: { [date: string]: HistoricalDataItem },
{ date, valueInBaseCurrency }
) => {
const formattedDate = format(date, DATE_FORMAT);
// Store the item in the map, overwriting if the date already exists
map[formattedDate] = {
date: formattedDate,
value: valueInBaseCurrency
};
return map;
},
{}
)
);
const { portfolioOrders, transactionPoints } = const { portfolioOrders, transactionPoints } =
await this.getTransactionPoints({ await this.getTransactionPoints({
@ -1221,6 +1237,10 @@ export class PortfolioService {
).div(100); ).div(100);
} }
accountBalanceItems = accountBalanceItems.filter(({ date }) => {
return !isBefore(parseDate(date), startDate);
});
const mergedHistoricalDataItems = this.mergeHistoricalDataItems( const mergedHistoricalDataItems = this.mergeHistoricalDataItems(
accountBalanceItems, accountBalanceItems,
items items
@ -2016,17 +2036,28 @@ export class PortfolioService {
} }
private mergeHistoricalDataItems( private mergeHistoricalDataItems(
array1: HistoricalDataItem[], accountBalanceItems: HistoricalDataItem[],
array2: HistoricalDataItem[] performanceChartItems: HistoricalDataItem[]
): HistoricalDataItem[] { ): HistoricalDataItem[] {
const historicalDataItemsMap: { [date: string]: HistoricalDataItem } = {}; const historicalDataItemsMap: { [date: string]: HistoricalDataItem } = {};
let latestAccountBalance = 0;
for (const item of accountBalanceItems.concat(performanceChartItems)) {
const isAccountBalanceItem = accountBalanceItems.includes(item);
const totalAccountBalance = isAccountBalanceItem
? item.value
: latestAccountBalance;
for (const item of array1.concat(array2)) {
historicalDataItemsMap[item.date] = { historicalDataItemsMap[item.date] = {
...item, ...item,
netWorth: (historicalDataItemsMap[item.date]?.value ?? 0) + item.value, totalAccountBalance,
totalAccountBalance: 0 // TODO: if from array1, then take value, otherwise 0 netWorth: (isAccountBalanceItem ? 0 : item.value) + totalAccountBalance
}; };
if (isAccountBalanceItem) {
latestAccountBalance = item.value;
}
} }
// Convert to an array and sort by date in ascending order // Convert to an array and sort by date in ascending order

Loading…
Cancel
Save