Browse Source

Refactoring

pull/2948/head
Thomas Kaul 2 years ago
parent
commit
58a248a93e
  1. 6
      apps/api/src/app/portfolio/portfolio-calculator-novn-buy-and-sell.spec.ts
  2. 21
      apps/api/src/app/portfolio/portfolio-calculator.ts
  3. 25
      apps/api/src/app/portfolio/portfolio.service.ts

6
apps/api/src/app/portfolio/portfolio-calculator-novn-buy-and-sell.spec.ts

@ -68,9 +68,9 @@ describe('PortfolioCalculator', () => {
.spyOn(Date, 'now')
.mockImplementation(() => parseDate('2022-04-11').getTime());
const chartData = await portfolioCalculator.getChartData(
parseDate('2022-03-07')
);
const chartData = await portfolioCalculator.getChartData({
start: parseDate('2022-03-07')
});
const currentPositions = await portfolioCalculator.getCurrentPositions(
parseDate('2022-03-07')

21
apps/api/src/app/portfolio/portfolio-calculator.ts

@ -174,11 +174,15 @@ export class PortfolioCalculator {
this.transactionPoints = transactionPoints;
}
public async getChartData(
start: Date,
public async getChartData({
end = new Date(Date.now()),
start,
step = 1
): Promise<HistoricalDataItem[]> {
}: {
end?: Date;
start: Date;
step?: number;
}): Promise<HistoricalDataItem[]> {
const symbols: { [symbol: string]: boolean } = {};
const transactionPointsBeforeEndDate =
@ -686,6 +690,9 @@ export class PortfolioCalculator {
});
}
/**
* @deprecated
*/
public getInvestmentsByGroup(
groupBy: GroupBy
): { date: string; investment: Big }[] {
@ -1421,6 +1428,10 @@ export class PortfolioCalculator {
investmentValuesAccumulatedWithCurrencyEffect[order.date] =
totalInvestmentWithCurrencyEffect;
investmentValuesWithCurrencyEffect[order.date] = (
investmentValuesWithCurrencyEffect[order.date] ?? new Big(0)
).add(transactionInvestmentWithCurrencyEffect);
timeWeightedInvestmentValues[order.date] =
totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
@ -1432,10 +1443,6 @@ export class PortfolioCalculator {
totalInvestmentDays
)
: new Big(0);
investmentValuesWithCurrencyEffect[order.date] = (
investmentValuesWithCurrencyEffect[order.date] ?? new Big(0)
).add(transactionInvestmentWithCurrencyEffect);
}
}

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

@ -1442,11 +1442,11 @@ export class PortfolioService {
step = Math.round(daysInMarket / Math.min(daysInMarket, MAX_CHART_ITEMS));
}
const items = await portfolioCalculator.getChartData(
startDate,
endDate,
step
);
const items = await portfolioCalculator.getChartData({
step,
end: endDate,
start: startDate
});
return {
items,
@ -1606,18 +1606,19 @@ export class PortfolioService {
data: HistoricalDataItem[];
groupBy: GroupBy;
}): InvestmentItem[] {
const groupedData: { [dateGroup: string]: number } = {};
const groupedData: { [dateGroup: string]: Big } = {};
for (const { date, investmentValueWithCurrencyEffect } of data) {
const unit =
const dateGroup =
groupBy === 'month' ? date.substring(0, 7) : date.substring(0, 4);
groupedData[unit] =
(groupedData[unit] ?? 0) + investmentValueWithCurrencyEffect;
groupedData[dateGroup] = (groupedData[dateGroup] ?? new Big(0)).plus(
investmentValueWithCurrencyEffect
);
}
return Object.keys(groupedData).map((unit) => ({
date: groupBy === 'month' ? `${unit}-01` : `${unit}-01-01`,
investment: groupedData[unit]
return Object.keys(groupedData).map((dateGroup) => ({
date: groupBy === 'month' ? `${dateGroup}-01` : `${dateGroup}-01-01`,
investment: groupedData[dateGroup].toNumber()
}));
}

Loading…
Cancel
Save