From b7520735bd7bea4e50efa44f43aca5cc39276a7d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 5 Sep 2026 10:01:05 +0200 Subject: [PATCH] Bugfix/market data storage in data provider service (#7814) * Fix storage of market data to store only newly fetched quotes * Update changelog --- CHANGELOG.md | 1 + .../data-provider/data-provider.service.ts | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f020cbf21..7a46165fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the data provider information in the holding detail dialog +- Fixed the storage of the market data in the data provider service to only include the newly fetched quotes - Fixed the immediate expiration of a portfolio snapshot with errors - Fixed the missing country mapping of _Congo (Dem. Rep. of the)_ and _Congo (Rep. of)_ in the _Financial Modeling Prep_ service diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 9366574ac..0417315d4 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -725,6 +725,10 @@ export class DataProviderService implements OnModuleInit { promises.push( promise.then(async (result) => { + const fetchedQuotes: (DataProviderResponse & { + symbol: string; + })[] = []; + for (const [symbol, dataProviderResponse] of Object.entries( result )) { @@ -739,12 +743,16 @@ export class DataProviderService implements OnModuleInit { continue; } + const quote = { ...dataProviderResponse, symbol }; + + fetchedQuotes.push(quote); + response[ getAssetProfileIdentifier({ symbol, dataSource: DataSource[dataSource] }) - ] = { ...dataProviderResponse, symbol }; + ] = quote; this.redisCacheService.set( this.redisCacheService.getQuoteKey({ @@ -772,15 +780,19 @@ export class DataProviderService implements OnModuleInit { marketState: 'open' }; + const derivedQuote = { + ...derivedDataProviderResponse, + symbol: `${DEFAULT_CURRENCY}${currency}` + }; + + fetchedQuotes.push(derivedQuote); + response[ getAssetProfileIdentifier({ dataSource: DataSource[dataSource], symbol: `${DEFAULT_CURRENCY}${currency}` }) - ] = { - ...derivedDataProviderResponse, - symbol: `${DEFAULT_CURRENCY}${currency}` - }; + ] = derivedQuote; this.redisCacheService.set( this.redisCacheService.getQuoteKey({ @@ -805,7 +817,7 @@ export class DataProviderService implements OnModuleInit { try { await this.marketDataService.updateMany({ - data: Object.values(response) + data: fetchedQuotes .filter(({ marketPrice, marketState }) => { return ( isNumber(marketPrice) &&