From 2a19398051c84a2a94001a02d3b1199ba0590e11 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 19 Apr 2025 13:11:52 +0200 Subject: [PATCH] Parallelize asset profile requests --- .../financial-modeling-prep.service.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 32aff4387..518056dfd 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -357,6 +357,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { } try { + const currencyBySymbolMap: { + [symbol: string]: Pick; + } = {}; + const quotes = await fetch( `${this.getUrl({ version: 'stable' })}/batch-quote-short?symbols=${symbols.join(',')}&apikey=${this.apiKey}`, { @@ -364,11 +368,17 @@ export class FinancialModelingPrepService implements DataProviderInterface { } ).then((res) => res.json()); - for (const { price, symbol } of quotes) { - const { currency } = await this.getAssetProfile({ symbol }); + await Promise.all( + quotes.map(({ symbol }) => { + return this.getAssetProfile({ symbol }).then(({ currency }) => { + currencyBySymbolMap[symbol] = { currency }; + }); + }) + ); + for (const { price, symbol } of quotes) { response[symbol] = { - currency, + currency: currencyBySymbolMap[symbol]?.currency, dataProviderInfo: this.getDataProviderInfo(), dataSource: DataSource.FINANCIAL_MODELING_PREP, marketPrice: price,