From 6020e4650f681b799b601530748ed62333ec09b8 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Mon, 17 Apr 2023 13:32:23 +0200 Subject: [PATCH] Refactoring --- .../data-enhancer/data-enhancer.module.ts | 7 +- .../yahoo-finance/yahoo-finance.service.ts | 108 +++++++++--------- .../yahoo-finance/yahoo-finance.service.ts | 7 ++ 3 files changed, 64 insertions(+), 58 deletions(-) diff --git a/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts index 5c0740d5c..d7b7d00a5 100644 --- a/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts +++ b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts @@ -15,13 +15,12 @@ import { Module } from '@nestjs/common'; TrackinsightDataEnhancerService, YahooFinanceDataEnhancerService, { - // Yahoo Finance before Trackinsight inject: [ - YahooFinanceDataEnhancerService, - TrackinsightDataEnhancerService + TrackinsightDataEnhancerService, + YahooFinanceDataEnhancerService ], provide: 'DataEnhancers', - useFactory: (yahooFinance, trackinsight) => [yahooFinance, trackinsight] + useFactory: (trackinsight, yahooFinance) => [trackinsight, yahooFinance] } ] }) diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 81467e2b8..b8484b772 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -179,60 +179,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { return name || shortName || symbol; } - public getName() { - return DataSource.YAHOO; - } - - public parseAssetClass({ - quoteType, - shortName - }: { - quoteType: string; - shortName: string; - }): { - assetClass: AssetClass; - assetSubClass: AssetSubClass; - } { - let assetClass: AssetClass; - let assetSubClass: AssetSubClass; - - switch (quoteType?.toLowerCase()) { - case 'cryptocurrency': - assetClass = AssetClass.CASH; - assetSubClass = AssetSubClass.CRYPTOCURRENCY; - break; - case 'equity': - assetClass = AssetClass.EQUITY; - assetSubClass = AssetSubClass.STOCK; - break; - case 'etf': - assetClass = AssetClass.EQUITY; - assetSubClass = AssetSubClass.ETF; - break; - case 'future': - assetClass = AssetClass.COMMODITY; - assetSubClass = AssetSubClass.COMMODITY; - - if ( - shortName?.toLowerCase()?.startsWith('gold') || - shortName?.toLowerCase()?.startsWith('palladium') || - shortName?.toLowerCase()?.startsWith('platinum') || - shortName?.toLowerCase()?.startsWith('silver') - ) { - assetSubClass = AssetSubClass.PRECIOUS_METAL; - } - - break; - case 'mutualfund': - assetClass = AssetClass.EQUITY; - assetSubClass = AssetSubClass.MUTUALFUND; - break; - } - - return { assetClass, assetSubClass }; - } - - private async getAssetProfile( + public async getAssetProfile( aSymbol: string ): Promise> { const response: Partial = {}; @@ -303,6 +250,59 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { return response; } + public getName() { + return DataSource.YAHOO; + } + + public parseAssetClass({ + quoteType, + shortName + }: { + quoteType: string; + shortName: string; + }): { + assetClass: AssetClass; + assetSubClass: AssetSubClass; + } { + let assetClass: AssetClass; + let assetSubClass: AssetSubClass; + + switch (quoteType?.toLowerCase()) { + case 'cryptocurrency': + assetClass = AssetClass.CASH; + assetSubClass = AssetSubClass.CRYPTOCURRENCY; + break; + case 'equity': + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.STOCK; + break; + case 'etf': + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.ETF; + break; + case 'future': + assetClass = AssetClass.COMMODITY; + assetSubClass = AssetSubClass.COMMODITY; + + if ( + shortName?.toLowerCase()?.startsWith('gold') || + shortName?.toLowerCase()?.startsWith('palladium') || + shortName?.toLowerCase()?.startsWith('platinum') || + shortName?.toLowerCase()?.startsWith('silver') + ) { + assetSubClass = AssetSubClass.PRECIOUS_METAL; + } + + break; + case 'mutualfund': + assetClass = AssetClass.EQUITY; + assetSubClass = AssetSubClass.MUTUALFUND; + break; + } + + return { assetClass, assetSubClass }; + } + private parseSector(aString: string): string { let sector = UNKNOWN_KEY; diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index c9c5e9219..863ee5878 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -34,7 +34,14 @@ export class YahooFinanceService implements DataProviderInterface { public async getAssetProfile( aSymbol: string ): Promise> { + const { assetClass, assetSubClass, currency, name } = + await this.yahooFinanceDataEnhancerService.getAssetProfile(aSymbol); + return { + assetClass, + assetSubClass, + currency, + name, dataSource: this.getName(), symbol: aSymbol };