From c07f65f304ad8a4367b6f984e59e564dedd206c3 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:14:09 +0200 Subject: [PATCH] Fix currency inconsistency in the yahoo finance service * GBp to GBP --- .../yahoo-finance/yahoo-finance.service.ts | 11 +++++++++++ libs/common/src/lib/helper.ts | 14 ++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 3d0b8e7e5..9b744468b 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -10,6 +10,7 @@ import { Granularity } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; import { AssetClass, Currency, DataSource } from '@prisma/client'; import * as bent from 'bent'; +import Big from 'big.js'; import { format } from 'date-fns'; import * as yahooFinance from 'yahoo-finance'; @@ -72,6 +73,16 @@ export class YahooFinanceService implements DataProviderInterface { name: value.price?.longName || value.price?.shortName || symbol }; + if (value.price?.currency === 'GBp') { + // Convert GBp (pence) to GBP + response[symbol].currency = Currency.GBP; + response[symbol].marketPrice = new Big( + value.price?.regularMarketPrice ?? 0 + ) + .div(100) + .toNumber(); + } + const url = value.summaryProfile?.website; if (url) { response[symbol].url = url; diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index d99b039c6..cfbbcd603 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -102,18 +102,8 @@ export function isRakutenRapidApiSymbol(aSymbol = '') { return aSymbol === 'GF.FEAR_AND_GREED_INDEX'; } -export function parseCurrency(aString: string): Currency { - if (aString?.toLowerCase() === 'chf') { - return Currency.CHF; - } else if (aString?.toLowerCase() === 'eur') { - return Currency.EUR; - } else if (aString?.toLowerCase() === 'gbp') { - return Currency.GBP; - } else if (aString?.toLowerCase() === 'usd') { - return Currency.USD; - } - - return undefined; +export function parseCurrency(aCurrency: string): Currency { + return Currency[aCurrency]; } export function resetHours(aDate: Date) {