From 522b6b5f820e16ca1b57c8c8c9e1b99dd9cf5774 Mon Sep 17 00:00:00 2001 From: Valentin Zickner Date: Wed, 6 Oct 2021 20:22:51 +0200 Subject: [PATCH] refactor data-provider.service.ts --- .../data-provider/data-provider.service.ts | 40 ++++++------------- .../yahoo-finance/yahoo-finance.service.ts | 11 +++-- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 7995eb563..396f2f824 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -16,10 +16,7 @@ import { isEmpty } from 'lodash'; import { AlphaVantageService } from './alpha-vantage/alpha-vantage.service'; import { GhostfolioScraperApiService } from './ghostfolio-scraper-api/ghostfolio-scraper-api.service'; import { RakutenRapidApiService } from './rakuten-rapid-api/rakuten-rapid-api.service'; -import { - YahooFinanceService, - convertToYahooFinanceSymbol -} from './yahoo-finance/yahoo-finance.service'; +import { YahooFinanceService } from './yahoo-finance/yahoo-finance.service'; @Injectable() export class DataProviderService { @@ -42,25 +39,10 @@ export class DataProviderService { } = {}; for (const item of items) { - if (item.dataSource === DataSource.ALPHA_VANTAGE) { - response[item.symbol] = ( - await this.alphaVantageService.get([item.symbol]) - )[item.symbol]; - } else if (item.dataSource === DataSource.GHOSTFOLIO) { - response[item.symbol] = ( - await this.ghostfolioScraperApiService.get([item.symbol]) - )[item.symbol]; - } else if (item.dataSource === DataSource.RAKUTEN) { - response[item.symbol] = ( - await this.rakutenRapidApiService.get([item.symbol]) - )[item.symbol]; - } else if (item.dataSource === DataSource.YAHOO) { - response[item.symbol] = ( - await this.yahooFinanceService.get([ - convertToYahooFinanceSymbol(item.symbol) - ]) - )[item.symbol]; - } + const dataProvider = this.getDataProvider(item.dataSource); + response[item.symbol] = (await dataProvider.get([item.symbol]))[ + item.symbol + ]; } return response; @@ -103,11 +85,13 @@ export class DataProviderService { }); try { - const queryRaw = `SELECT * FROM "MarketData" WHERE "dataSource" IN ('${dataSources.join( - `','` - )}') AND "symbol" IN ('${symbols.join( - `','` - )}') ${granularityQuery} ${rangeQuery} ORDER BY date;`; + const queryRaw = `SELECT * + FROM "MarketData" + WHERE "dataSource" IN ('${dataSources.join(`','`)}') + AND "symbol" IN ('${symbols.join( + `','` + )}') ${granularityQuery} ${rangeQuery} + ORDER BY date;`; const marketDataByGranularity: MarketData[] = await this.prismaService.$queryRaw(queryRaw); 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 c32d543e1..5c0804fc1 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 @@ -33,11 +33,14 @@ export class YahooFinanceService implements DataProviderInterface { } public async get( - aYahooFinanceSymbols: string[] + aSymbols: string[] ): Promise<{ [symbol: string]: IDataProviderResponse }> { - if (aYahooFinanceSymbols.length <= 0) { + if (aSymbols.length <= 0) { return {}; } + const yahooFinanceSymbols = aSymbols.map((symbol) => + convertToYahooFinanceSymbol(symbol) + ); try { const response: { [symbol: string]: IDataProviderResponse } = {}; @@ -46,7 +49,7 @@ export class YahooFinanceService implements DataProviderInterface { [symbol: string]: IYahooFinanceQuoteResponse; } = await yahooFinance.quote({ modules: ['price', 'summaryProfile'], - symbols: aYahooFinanceSymbols + symbols: yahooFinanceSymbols }); for (const [yahooFinanceSymbol, value] of Object.entries(data)) { @@ -261,7 +264,7 @@ export const convertFromYahooFinanceSymbol = (aYahooFinanceSymbol: string) => { * DOGEUSD -> DOGE-USD * SOL1USD -> SOL1-USD */ -export const convertToYahooFinanceSymbol = (aSymbol: string) => { +const convertToYahooFinanceSymbol = (aSymbol: string) => { if ( (aSymbol.includes('CHF') || aSymbol.includes('EUR') ||