Browse Source

Refactoring

pull/3813/head
Thomas Kaul 11 months ago
parent
commit
b0346b7206
  1. 26
      apps/api/src/app/account-balance/account-balance.service.ts

26
apps/api/src/app/account-balance/account-balance.service.ts

@ -2,17 +2,17 @@ import { PortfolioChangedEvent } from '@ghostfolio/api/events/portfolio-changed.
import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor'; import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { DATE_FORMAT, resetHours } from '@ghostfolio/common/helper'; import { DATE_FORMAT, getSum, resetHours } from '@ghostfolio/common/helper';
import { import {
AccountBalancesResponse, AccountBalancesResponse,
Filter, Filter,
HistoricalDataItem HistoricalDataItem
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { UserWithSettings } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter'; import { EventEmitter2 } from '@nestjs/event-emitter';
import { AccountBalance, Prisma } from '@prisma/client'; import { AccountBalance, Prisma } from '@prisma/client';
import { Big } from 'big.js';
import { format, parseISO } from 'date-fns'; import { format, parseISO } from 'date-fns';
import { CreateAccountBalanceDto } from './create-account-balance.dto'; import { CreateAccountBalanceDto } from './create-account-balance.dto';
@ -110,31 +110,25 @@ export class AccountBalanceService {
userId, userId,
withExcludedAccounts: false // TODO withExcludedAccounts: false // TODO
}); });
const accumulatedBalances: { [date: string]: HistoricalDataItem } = {}; const accumulatedBalancesByDate: { [date: string]: HistoricalDataItem } =
const lastBalancesByAccount: { [accountId: string]: number } = {}; {};
const lastBalancesByAccount: { [accountId: string]: Big } = {};
for (const { accountId, date, valueInBaseCurrency } of balances) { for (const { accountId, date, valueInBaseCurrency } of balances) {
const formattedDate = format(date, DATE_FORMAT); const formattedDate = format(date, DATE_FORMAT);
// Update the balance for the current account lastBalancesByAccount[accountId] = new Big(valueInBaseCurrency);
lastBalancesByAccount[accountId] = valueInBaseCurrency;
// Calculate the total balance for all accounts at this date by summing last known balances const totalBalance = getSum(Object.values(lastBalancesByAccount));
const totalBalance = Object.values(lastBalancesByAccount).reduce(
(sum, balance) => {
return sum + balance;
},
0
);
// Add or update the accumulated balance for this date // Add or update the accumulated balance for this date
accumulatedBalances[formattedDate] = { accumulatedBalancesByDate[formattedDate] = {
date: formattedDate, date: formattedDate,
value: totalBalance value: totalBalance.toNumber()
}; };
} }
return Object.values(accumulatedBalances); return Object.values(accumulatedBalancesByDate);
} }
@LogPerformance @LogPerformance

Loading…
Cancel
Save