Browse Source

Improve handling of derived currencies (getHistoricalRaw())

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

28
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,6 +220,23 @@ 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)) {
// 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
})
);
} else {
promises.push( promises.push(
dataProvider dataProvider
.getHistorical({ .getHistorical({
@ -230,10 +245,13 @@ export class DataProviderService {
to, to,
requestTimeout: ms('30 seconds') requestTimeout: ms('30 seconds')
}) })
.then((data) => ({ data: data?.[symbol], symbol })) .then((data) => {
return { symbol, data: data?.[symbol] };
})
); );
} }
} }
}
try { try {
const allData = await Promise.all(promises); const allData = await Promise.all(promises);
@ -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