Browse Source

Improve handling of derived currencies (getHistoricalRaw())

pull/2891/head
Thomas Kaul 2 years ago
parent
commit
8205c7e3f1
  1. 44
      apps/api/src/services/data-provider/data-provider.service.ts

44
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 { Inject, Injectable, Logger } from '@nestjs/common';
import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client';
import Big from 'big.js'; 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 { groupBy, isEmpty, isNumber } from 'lodash';
import ms from 'ms'; import ms from 'ms';
@ -209,8 +209,6 @@ export class DataProviderService {
): Promise<{ ): Promise<{
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
}> { }> {
// TODO
const result: { const result: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {}; } = {};
@ -222,16 +220,36 @@ export class DataProviderService {
for (const { dataSource, symbol } of aDataGatheringItems) { for (const { dataSource, symbol } of aDataGatheringItems) {
const dataProvider = this.getDataProvider(dataSource); const dataProvider = this.getDataProvider(dataSource);
if (dataProvider.canHandle(symbol)) { if (dataProvider.canHandle(symbol)) {
promises.push( // TODO: Handle derived currencies
dataProvider if (symbol === `${DEFAULT_CURRENCY}USX`) {
.getHistorical({ const data: {
from, [date: string]: IDataProviderHistoricalResponse;
symbol, } = {};
to,
requestTimeout: ms('30 seconds') 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'); Logger.error(error, 'DataProviderService');
} }
console.log({ result });
return result; return result;
} }

Loading…
Cancel
Save