From e110810a509d9cc1d4901f94caa4fe6549d64257 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:32:47 +0100 Subject: [PATCH] Improve validation of non-numeric numbers --- .../eod-historical-data.service.ts | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 38b2e8a42..98e58e4d4 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -22,6 +22,7 @@ import { } from '@prisma/client'; import { addDays, format, isSameDay, isToday } from 'date-fns'; import got from 'got'; +import { isNumber } from 'lodash'; @Injectable() export class EodHistoricalDataService implements DataProviderInterface { @@ -144,10 +145,20 @@ export class EodHistoricalDataService implements DataProviderInterface { ).json(); return response.reduce( - (result, historicalItem, index, array) => { - result[this.convertFromEodSymbol(symbol)][historicalItem.date] = { - marketPrice: historicalItem.close - }; + (result, { close, date }, index, array) => { + if (isNumber(close)) { + result[this.convertFromEodSymbol(symbol)][date] = { + marketPrice: close + }; + } else { + Logger.error( + `Could not get historical data for ${symbol} (${this.getName()}) from ${format( + from, + DATE_FORMAT + )} to ${format(to, DATE_FORMAT)}`, + 'EodHistoricalDataService' + ); + } return result; }, @@ -232,14 +243,23 @@ export class EodHistoricalDataService implements DataProviderInterface { return lookupItem.symbol === code; })?.currency; - result[this.convertFromEodSymbol(code)] = { - currency: - currency ?? - this.convertFromEodSymbol(code)?.replace(DEFAULT_CURRENCY, ''), - dataSource: DataSource.EOD_HISTORICAL_DATA, - marketPrice: close, - marketState: isToday(new Date(timestamp * 1000)) ? 'open' : 'closed' - }; + if (isNumber(close)) { + result[this.convertFromEodSymbol(code)] = { + currency: + currency ?? + this.convertFromEodSymbol(code)?.replace(DEFAULT_CURRENCY, ''), + dataSource: DataSource.EOD_HISTORICAL_DATA, + marketPrice: close, + marketState: isToday(new Date(timestamp * 1000)) + ? 'open' + : 'closed' + }; + } else { + Logger.error( + `Could not get quotes for ${this.convertFromEodSymbol(code)} (${this.getName()})`, + 'EodHistoricalDataService' + ); + } return result; },