Browse Source

refactor data-provider.service.ts

pull/410/head
Valentin Zickner 4 years ago
parent
commit
522b6b5f82
  1. 38
      apps/api/src/services/data-provider/data-provider.service.ts
  2. 11
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

38
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(
const queryRaw = `SELECT *
FROM "MarketData"
WHERE "dataSource" IN ('${dataSources.join(`','`)}')
AND "symbol" IN ('${symbols.join(
`','`
)}') ${granularityQuery} ${rangeQuery} ORDER BY date;`;
)}') ${granularityQuery} ${rangeQuery}
ORDER BY date;`;
const marketDataByGranularity: MarketData[] =
await this.prismaService.$queryRaw(queryRaw);

11
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') ||

Loading…
Cancel
Save