From 89f1d94f95b8cae63ed655450c57dcbaee1ff94a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 21 Apr 2025 19:02:58 +0200 Subject: [PATCH] Refactoring --- .../portfolio/calculator/mwr/portfolio-calculator.ts | 5 +++++ .../calculator/portfolio-calculator.factory.ts | 4 ---- .../app/portfolio/calculator/portfolio-calculator.ts | 10 ++++------ .../portfolio/calculator/roai/portfolio-calculator.ts | 5 +++++ .../portfolio/calculator/roi/portfolio-calculator.ts | 5 +++++ .../portfolio/calculator/twr/portfolio-calculator.ts | 5 +++++ 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts index fab15e6e7..1460892fa 100644 --- a/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/mwr/portfolio-calculator.ts @@ -4,12 +4,17 @@ import { SymbolMetrics } from '@ghostfolio/common/interfaces'; import { PortfolioSnapshot } from '@ghostfolio/common/models'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; export class MwrPortfolioCalculator extends PortfolioCalculator { protected calculateOverallPerformance(): PortfolioSnapshot { throw new Error('Method not implemented.'); } + protected getPerformanceCalculationType() { + return PerformanceCalculationType.MWR; + } + protected getSymbolMetrics({}: { end: Date; exchangeRates: { [dateString: string]: number }; diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts index 8ade63a33..24fe2b2f3 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts @@ -45,7 +45,6 @@ export class PortfolioCalculatorFactory { return new MwrPortfolioCalculator({ accountBalanceItems, activities, - calculationType, currency, filters, userId, @@ -60,7 +59,6 @@ export class PortfolioCalculatorFactory { return new RoaiPortfolioCalculator({ accountBalanceItems, activities, - calculationType, currency, filters, userId, @@ -75,7 +73,6 @@ export class PortfolioCalculatorFactory { return new RoiPortfolioCalculator({ accountBalanceItems, activities, - calculationType, currency, filters, userId, @@ -90,7 +87,6 @@ export class PortfolioCalculatorFactory { return new TwrPortfolioCalculator({ accountBalanceItems, activities, - calculationType, currency, filters, userId, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index b746f9f58..850b58113 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -58,7 +58,6 @@ export abstract class PortfolioCalculator { protected accountBalanceItems: HistoricalDataItem[]; protected activities: PortfolioOrder[]; - private calculationType: PerformanceCalculationType; private configurationService: ConfigurationService; private currency: string; private currentRateService: CurrentRateService; @@ -77,7 +76,6 @@ export abstract class PortfolioCalculator { public constructor({ accountBalanceItems, activities, - calculationType, configurationService, currency, currentRateService, @@ -89,7 +87,6 @@ export abstract class PortfolioCalculator { }: { accountBalanceItems: HistoricalDataItem[]; activities: Activity[]; - calculationType: PerformanceCalculationType; configurationService: ConfigurationService; currency: string; currentRateService: CurrentRateService; @@ -100,7 +97,6 @@ export abstract class PortfolioCalculator { userId: string; }) { this.accountBalanceItems = accountBalanceItems; - this.calculationType = calculationType; this.configurationService = configurationService; this.currency = currency; this.currentRateService = currentRateService; @@ -628,6 +624,8 @@ export abstract class PortfolioCalculator { }; } + protected abstract getPerformanceCalculationType(): PerformanceCalculationType; + public getDataProviderInfos() { return this.dataProviderInfos; } @@ -1078,7 +1076,7 @@ export abstract class PortfolioCalculator { // Compute in the background this.portfolioSnapshotService.addJobToQueue({ data: { - calculationType: this.calculationType, + calculationType: this.getPerformanceCalculationType(), filters: this.filters, userCurrency: this.currency, userId: this.userId @@ -1095,7 +1093,7 @@ export abstract class PortfolioCalculator { // Wait for computation await this.portfolioSnapshotService.addJobToQueue({ data: { - calculationType: this.calculationType, + calculationType: this.getPerformanceCalculationType(), filters: this.filters, userCurrency: this.currency, userId: this.userId diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 5b918fa03..c22a101bd 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -9,6 +9,7 @@ import { } from '@ghostfolio/common/interfaces'; import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models'; import { DateRange } from '@ghostfolio/common/types'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Logger } from '@nestjs/common'; import { Big } from 'big.js'; @@ -112,6 +113,10 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { }; } + protected getPerformanceCalculationType() { + return PerformanceCalculationType.ROAI; + } + protected getSymbolMetrics({ chartDateMap, dataSource, diff --git a/apps/api/src/app/portfolio/calculator/roi/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roi/portfolio-calculator.ts index 16a390584..b4929c570 100644 --- a/apps/api/src/app/portfolio/calculator/roi/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roi/portfolio-calculator.ts @@ -4,12 +4,17 @@ import { SymbolMetrics } from '@ghostfolio/common/interfaces'; import { PortfolioSnapshot } from '@ghostfolio/common/models'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; export class RoiPortfolioCalculator extends PortfolioCalculator { protected calculateOverallPerformance(): PortfolioSnapshot { throw new Error('Method not implemented.'); } + protected getPerformanceCalculationType() { + return PerformanceCalculationType.ROI; + } + protected getSymbolMetrics({}: { end: Date; exchangeRates: { [dateString: string]: number }; diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts index 6499ca3db..8a58f816a 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts @@ -4,12 +4,17 @@ import { SymbolMetrics } from '@ghostfolio/common/interfaces'; import { PortfolioSnapshot } from '@ghostfolio/common/models'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; export class TwrPortfolioCalculator extends PortfolioCalculator { protected calculateOverallPerformance(): PortfolioSnapshot { throw new Error('Method not implemented.'); } + protected getPerformanceCalculationType() { + return PerformanceCalculationType.TWR; + } + protected getSymbolMetrics({}: { end: Date; exchangeRates: { [dateString: string]: number };