From 402d73a12c9e7ab011c86d9dfa36c80b04c7c3bd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 16 Mar 2022 22:07:18 +0100 Subject: [PATCH] Bugfix/fix get quotes for multiple ghostfolio symbols (#758) * Support multiple symbols in getQuotes() * Update changelog --- CHANGELOG.md | 4 +++ .../ghostfolio-scraper-api.service.ts | 33 ++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce8e7faca..691f1b259 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the error handling in the scraper configuration +### Fixed + +- Fixed the support for multiple symbols of the data source `GHOSTFOLIO` + ## 1.126.0 - 14.03.2022 ### Added diff --git a/apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts b/apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts index bd126e235..fb4df11e8 100644 --- a/apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts @@ -84,33 +84,42 @@ export class GhostfolioScraperApiService implements DataProviderInterface { public async getQuotes( aSymbols: string[] ): Promise<{ [symbol: string]: IDataProviderResponse }> { + const response: { [symbol: string]: IDataProviderResponse } = {}; + if (aSymbols.length <= 0) { - return {}; + return response; } try { - const [symbol] = aSymbols; - const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles( - [symbol] + const symbolProfiles = await this.symbolProfileService.getSymbolProfiles( + aSymbols ); - const { marketPrice } = await this.prismaService.marketData.findFirst({ + const marketData = await this.prismaService.marketData.findMany({ + distinct: ['symbol'], orderBy: { date: 'desc' }, + take: aSymbols.length, where: { - symbol + symbol: { + in: aSymbols + } } }); - return { - [symbol]: { - marketPrice, - currency: symbolProfile?.currency, + for (const symbolProfile of symbolProfiles) { + response[symbolProfile.symbol] = { + currency: symbolProfile.currency, dataSource: this.getName(), + marketPrice: marketData.find((marketDataItem) => { + return marketDataItem.symbol === symbolProfile.symbol; + }).marketPrice, marketState: MarketState.delayed - } - }; + }; + } + + return response; } catch (error) { Logger.error(error, 'GhostfolioScraperApiService'); }