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') .spyOn(Date, 'now')
.mockImplementation(() => parseDate('2022-04-11').getTime()); .mockImplementation(() => parseDate('2022-04-11').getTime());
const chartData = await portfolioCalculator.getChartData( const chartData = await portfolioCalculator.getChartData({
parseDate('2022-03-07') start: parseDate('2022-03-07')
); });
const currentPositions = await portfolioCalculator.getCurrentPositions( const currentPositions = await portfolioCalculator.getCurrentPositions(
parseDate('2022-03-07') parseDate('2022-03-07')

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

@ -174,11 +174,15 @@ export class PortfolioCalculator {
this.transactionPoints = transactionPoints; this.transactionPoints = transactionPoints;
} }
public async getChartData( public async getChartData({
start: Date,
end = new Date(Date.now()), end = new Date(Date.now()),
start,
step = 1 step = 1
): Promise<HistoricalDataItem[]> { }: {
end?: Date;
start: Date;
step?: number;
}): Promise<HistoricalDataItem[]> {
const symbols: { [symbol: string]: boolean } = {}; const symbols: { [symbol: string]: boolean } = {};
const transactionPointsBeforeEndDate = const transactionPointsBeforeEndDate =
@ -686,6 +690,9 @@ export class PortfolioCalculator {
}); });
} }
/**
* @deprecated
*/
public getInvestmentsByGroup( public getInvestmentsByGroup(
groupBy: GroupBy groupBy: GroupBy
): { date: string; investment: Big }[] { ): { date: string; investment: Big }[] {
@ -1421,6 +1428,10 @@ export class PortfolioCalculator {
investmentValuesAccumulatedWithCurrencyEffect[order.date] = investmentValuesAccumulatedWithCurrencyEffect[order.date] =
totalInvestmentWithCurrencyEffect; totalInvestmentWithCurrencyEffect;
investmentValuesWithCurrencyEffect[order.date] = (
investmentValuesWithCurrencyEffect[order.date] ?? new Big(0)
).add(transactionInvestmentWithCurrencyEffect);
timeWeightedInvestmentValues[order.date] = timeWeightedInvestmentValues[order.date] =
totalInvestmentDays > 0 totalInvestmentDays > 0
? sumOfTimeWeightedInvestments.div(totalInvestmentDays) ? sumOfTimeWeightedInvestments.div(totalInvestmentDays)
@ -1432,10 +1443,6 @@ export class PortfolioCalculator {
totalInvestmentDays totalInvestmentDays
) )
: new Big(0); : 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)); step = Math.round(daysInMarket / Math.min(daysInMarket, MAX_CHART_ITEMS));
} }
const items = await portfolioCalculator.getChartData( const items = await portfolioCalculator.getChartData({
startDate, step,
endDate, end: endDate,
step start: startDate
); });
return { return {
items, items,
@ -1606,18 +1606,19 @@ export class PortfolioService {
data: HistoricalDataItem[]; data: HistoricalDataItem[];
groupBy: GroupBy; groupBy: GroupBy;
}): InvestmentItem[] { }): InvestmentItem[] {
const groupedData: { [dateGroup: string]: number } = {}; const groupedData: { [dateGroup: string]: Big } = {};
for (const { date, investmentValueWithCurrencyEffect } of data) { for (const { date, investmentValueWithCurrencyEffect } of data) {
const unit = const dateGroup =
groupBy === 'month' ? date.substring(0, 7) : date.substring(0, 4); groupBy === 'month' ? date.substring(0, 7) : date.substring(0, 4);
groupedData[unit] = groupedData[dateGroup] = (groupedData[dateGroup] ?? new Big(0)).plus(
(groupedData[unit] ?? 0) + investmentValueWithCurrencyEffect; investmentValueWithCurrencyEffect
);
} }
return Object.keys(groupedData).map((unit) => ({ return Object.keys(groupedData).map((dateGroup) => ({
date: groupBy === 'month' ? `${unit}-01` : `${unit}-01-01`, date: groupBy === 'month' ? `${dateGroup}-01` : `${dateGroup}-01-01`,
investment: groupedData[unit] investment: groupedData[dateGroup].toNumber()
})); }));
} }

Loading…
Cancel
Save