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
- 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

View File

@ -357,6 +357,10 @@ export class FinancialModelingPrepService implements DataProviderInterface {
}
try {
const currencyBySymbolMap: {
[symbol: string]: Pick<SymbolProfile, 'currency'>;
} = {};
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,