From 8205c7e3f1f1029c5558e6e5921691ecb39f7e60 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:58:09 +0100 Subject: [PATCH] Improve handling of derived currencies (getHistoricalRaw()) --- .../data-provider/data-provider.service.ts | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 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 0e7788edb..6d92cec60 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -19,7 +19,7 @@ import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; import { Inject, Injectable, Logger } from '@nestjs/common'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; import Big from 'big.js'; -import { format, isValid } from 'date-fns'; +import { eachDayOfInterval, format, isValid } from 'date-fns'; import { groupBy, isEmpty, isNumber } from 'lodash'; import ms from 'ms'; @@ -209,8 +209,6 @@ export class DataProviderService { ): Promise<{ [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { - // TODO - const result: { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; } = {}; @@ -222,16 +220,36 @@ export class DataProviderService { for (const { dataSource, symbol } of aDataGatheringItems) { const dataProvider = this.getDataProvider(dataSource); if (dataProvider.canHandle(symbol)) { - promises.push( - dataProvider - .getHistorical({ - from, - symbol, - to, - requestTimeout: ms('30 seconds') + // TODO: Handle derived currencies + if (symbol === `${DEFAULT_CURRENCY}USX`) { + const data: { + [date: string]: IDataProviderHistoricalResponse; + } = {}; + + for (const date of eachDayOfInterval({ end: to, start: from })) { + data[format(date, DATE_FORMAT)] = { marketPrice: 100 }; + } + + promises.push( + Promise.resolve({ + data, + symbol }) - .then((data) => ({ data: data?.[symbol], symbol })) - ); + ); + } else { + promises.push( + dataProvider + .getHistorical({ + from, + symbol, + to, + requestTimeout: ms('30 seconds') + }) + .then((data) => { + return { symbol, data: data?.[symbol] }; + }) + ); + } } } @@ -244,6 +262,8 @@ export class DataProviderService { Logger.error(error, 'DataProviderService'); } + console.log({ result }); + return result; }