Browse Source

Refactoring

pull/2948/head
Thomas Kaul 2 years ago
parent
commit
ffd94d8e6a
  1. 70
      apps/api/src/app/portfolio/portfolio.service.ts

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

@ -79,7 +79,7 @@ import {
subDays, subDays,
subYears subYears
} from 'date-fns'; } from 'date-fns';
import { isEmpty, last, sortBy, uniq, uniqBy } from 'lodash'; import { isEmpty, last, uniq, uniqBy } from 'lodash';
import { import {
HistoricalDataContainer, HistoricalDataContainer,
@ -293,30 +293,27 @@ export class PortfolioService {
portfolioCalculator.setTransactionPoints(transactionPoints); portfolioCalculator.setTransactionPoints(transactionPoints);
const chartData = await this.getChart({ const { items } = await this.getChart({
dateRange, dateRange,
impersonationId, impersonationId,
portfolioOrders, portfolioOrders,
transactionPoints, transactionPoints,
userId, userId,
userCurrency: this.request.user.Settings.settings.baseCurrency userCurrency: this.request.user.Settings.settings.baseCurrency,
withDataDecimation: false
}); });
console.log(chartData.items);
let investments: InvestmentItem[]; let investments: InvestmentItem[];
if (groupBy) { if (groupBy) {
investments = this.groupHistoricalDataItems(chartData.items, groupBy); investments = this.getInvestmentsByGroup({ groupBy, data: items });
} else { } else {
investments = chartData.items.map( investments = items.map(({ date, investmentValueWithCurrencyEffect }) => {
({ date, investmentValueWithCurrencyEffect }) => {
return { return {
date, date,
investment: investmentValueWithCurrencyEffect investment: investmentValueWithCurrencyEffect
}; };
} });
);
} }
let streaks: PortfolioInvestments['streaks']; let streaks: PortfolioInvestments['streaks'];
@ -1403,7 +1400,8 @@ export class PortfolioService {
portfolioOrders, portfolioOrders,
transactionPoints, transactionPoints,
userCurrency, userCurrency,
userId userId,
withDataDecimation = true
}: { }: {
dateRange?: DateRange; dateRange?: DateRange;
impersonationId: string; impersonationId: string;
@ -1411,6 +1409,7 @@ export class PortfolioService {
transactionPoints: TransactionPoint[]; transactionPoints: TransactionPoint[];
userCurrency: string; userCurrency: string;
userId: string; userId: string;
withDataDecimation?: boolean;
}): Promise<HistoricalDataContainer> { }): Promise<HistoricalDataContainer> {
if (transactionPoints.length === 0) { if (transactionPoints.length === 0) {
return { return {
@ -1436,10 +1435,12 @@ export class PortfolioService {
const portfolioStart = parseDate(transactionPoints[0].date); const portfolioStart = parseDate(transactionPoints[0].date);
const startDate = this.getStartDate(dateRange, portfolioStart); const startDate = this.getStartDate(dateRange, portfolioStart);
let step = 1;
if (withDataDecimation) {
const daysInMarket = differenceInDays(new Date(), startDate); const daysInMarket = differenceInDays(new Date(), startDate);
const step = Math.round( step = Math.round(daysInMarket / Math.min(daysInMarket, MAX_CHART_ITEMS));
daysInMarket / Math.min(daysInMarket, MAX_CHART_ITEMS) }
);
const items = await portfolioCalculator.getChartData( const items = await portfolioCalculator.getChartData(
startDate, startDate,
@ -1598,6 +1599,28 @@ export class PortfolioService {
}; };
} }
private getInvestmentsByGroup({
data,
groupBy
}: {
data: HistoricalDataItem[];
groupBy: GroupBy;
}): InvestmentItem[] {
const groupedData: { [dateGroup: string]: number } = {};
for (const { date, investmentValueWithCurrencyEffect } of data) {
const unit =
groupBy === 'month' ? date.substring(0, 7) : date.substring(0, 4);
groupedData[unit] =
(groupedData[unit] ?? 0) + investmentValueWithCurrencyEffect;
}
return Object.keys(groupedData).map((unit) => ({
date: groupBy === 'month' ? `${unit}-01` : `${unit}-01-01`,
investment: groupedData[unit]
}));
}
private getStartDate(aDateRange: DateRange, portfolioStart: Date) { private getStartDate(aDateRange: DateRange, portfolioStart: Date) {
switch (aDateRange) { switch (aDateRange) {
case '1d': case '1d':
@ -2086,25 +2109,6 @@ export class PortfolioService {
return { accounts, platforms }; return { accounts, platforms };
} }
private groupHistoricalDataItems(
data: HistoricalDataItem[],
groupBy: GroupBy
): InvestmentItem[] {
const groupedData: { [dateGroup: string]: number } = {};
for (const { date, investmentValueWithCurrencyEffect } of data) {
const unit =
groupBy === 'month' ? date.substring(0, 7) : date.substring(0, 4);
groupedData[unit] =
(groupedData[unit] ?? 0) + investmentValueWithCurrencyEffect;
}
return Object.keys(groupedData).map((unit) => ({
date: groupBy === 'month' ? `${unit}-01` : `${unit}-01-01`,
investment: groupedData[unit]
}));
}
private mergeHistoricalDataItems( private mergeHistoricalDataItems(
accountBalanceItems: HistoricalDataItem[], accountBalanceItems: HistoricalDataItem[],
performanceChartItems: HistoricalDataItem[] performanceChartItems: HistoricalDataItem[]

Loading…
Cancel
Save