Browse Source

Feature/extend get historical in financial modeling prep service (#4229)

* Extend get historical

* Update changelog
pull/4230/head
Thomas Kaul 3 weeks ago
committed by GitHub
parent
commit
39ac6f352f
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 35
      apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

1
CHANGELOG.md

@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Extended the _Financial Modeling Prep_ service
- Improved the language localization for Ukrainian (`uk`) - Improved the language localization for Ukrainian (`uk`)
- Upgraded `date-fns` from version `3.6.0` to `4.1.0` - Upgraded `date-fns` from version `3.6.0` to `4.1.0`
- Upgraded `rxjs` from version `7.5.6` to `7.8.1` - Upgraded `rxjs` from version `7.5.6` to `7.8.1`

35
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

@ -29,6 +29,7 @@ import { isISIN } from 'class-validator';
import { countries } from 'countries-list'; import { countries } from 'countries-list';
import { import {
addDays, addDays,
addYears,
format, format,
isAfter, isAfter,
isBefore, isBefore,
@ -273,25 +274,36 @@ export class FinancialModelingPrepService implements DataProviderInterface {
}: GetHistoricalParams): Promise<{ }: GetHistoricalParams): Promise<{
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
}> { }> {
const MAX_YEARS_PER_REQUEST = 5;
const result: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {
[symbol]: {}
};
let currentFrom = from;
try { try {
while (isBefore(currentFrom, to) || isSameDay(currentFrom, to)) {
const currentTo = isBefore(
addYears(currentFrom, MAX_YEARS_PER_REQUEST),
to
)
? addYears(currentFrom, MAX_YEARS_PER_REQUEST)
: to;
const { historical } = await fetch( const { historical } = await fetch(
`${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}`, `${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}&from=${format(currentFrom, DATE_FORMAT)}&to=${format(currentTo, DATE_FORMAT)}`,
{ {
signal: AbortSignal.timeout(requestTimeout) signal: AbortSignal.timeout(requestTimeout)
} }
).then((res) => res.json()); ).then((res) => res.json());
const result: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {
[symbol]: {}
};
for (const { adjClose, date } of historical) { for (const { adjClose, date } of historical) {
if ( if (
(isSameDay(parseDate(date), from) || (isSameDay(parseDate(date), currentFrom) ||
isAfter(parseDate(date), from)) && isAfter(parseDate(date), currentFrom)) &&
isBefore(parseDate(date), to) isBefore(parseDate(date), currentTo)
) { ) {
result[symbol][date] = { result[symbol][date] = {
marketPrice: adjClose marketPrice: adjClose
@ -299,6 +311,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
} }
} }
currentFrom = addYears(currentFrom, MAX_YEARS_PER_REQUEST);
}
return result; return result;
} catch (error) { } catch (error) {
throw new Error( throw new Error(

Loading…
Cancel
Save