Feature/parallelize asset profile requests in get quotes functionality of Financial Modeling Prep service (#4569)

* Parallelize asset profile requests

* Update changelog
This commit is contained in:
Thomas Kaul 2025-04-21 07:42:32 +02:00 committed by GitHub
parent de6c416639
commit 1ae5ba7f8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 3 deletions

View File

@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Made the historical market data editor expandable in the admin control panel - Made the historical market data editor expandable in the admin control panel
- Parallelized the requests in the get quotes functionality of the _Financial Modeling Prep_ service
### Fixed ### Fixed

View File

@ -357,6 +357,10 @@ export class FinancialModelingPrepService implements DataProviderInterface {
} }
try { try {
const currencyBySymbolMap: {
[symbol: string]: Pick<SymbolProfile, 'currency'>;
} = {};
const quotes = await fetch( const quotes = await fetch(
`${this.getUrl({ version: 'stable' })}/batch-quote-short?symbols=${symbols.join(',')}&apikey=${this.apiKey}`, `${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()); ).then((res) => res.json());
for (const { price, symbol } of quotes) { await Promise.all(
const { currency } = await this.getAssetProfile({ symbol }); quotes.map(({ symbol }) => {
return this.getAssetProfile({ symbol }).then(({ currency }) => {
currencyBySymbolMap[symbol] = { currency };
});
})
);
for (const { price, symbol } of quotes) {
response[symbol] = { response[symbol] = {
currency, currency: currencyBySymbolMap[symbol]?.currency,
dataProviderInfo: this.getDataProviderInfo(), dataProviderInfo: this.getDataProviderInfo(),
dataSource: DataSource.FINANCIAL_MODELING_PREP, dataSource: DataSource.FINANCIAL_MODELING_PREP,
marketPrice: price, marketPrice: price,