Feature/extend get historical in financial modeling prep service (#4229)
* Extend get historical * Update changelog
This commit is contained in:
parent
04d7792b8b
commit
39ac6f352f
@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Extended the _Financial Modeling Prep_ service
|
||||
- Improved the language localization for Ukrainian (`uk`)
|
||||
- Upgraded `date-fns` from version `3.6.0` to `4.1.0`
|
||||
- Upgraded `rxjs` from version `7.5.6` to `7.8.1`
|
||||
|
@ -29,6 +29,7 @@ import { isISIN } from 'class-validator';
|
||||
import { countries } from 'countries-list';
|
||||
import {
|
||||
addDays,
|
||||
addYears,
|
||||
format,
|
||||
isAfter,
|
||||
isBefore,
|
||||
@ -273,25 +274,36 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
}: GetHistoricalParams): Promise<{
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
}> {
|
||||
try {
|
||||
const { historical } = await fetch(
|
||||
`${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}`,
|
||||
{
|
||||
signal: AbortSignal.timeout(requestTimeout)
|
||||
}
|
||||
).then((res) => res.json());
|
||||
|
||||
const MAX_YEARS_PER_REQUEST = 5;
|
||||
const result: {
|
||||
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
|
||||
} = {
|
||||
[symbol]: {}
|
||||
};
|
||||
|
||||
let currentFrom = from;
|
||||
|
||||
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(
|
||||
`${this.URL}/historical-price-full/${symbol}?apikey=${this.apiKey}&from=${format(currentFrom, DATE_FORMAT)}&to=${format(currentTo, DATE_FORMAT)}`,
|
||||
{
|
||||
signal: AbortSignal.timeout(requestTimeout)
|
||||
}
|
||||
).then((res) => res.json());
|
||||
|
||||
for (const { adjClose, date } of historical) {
|
||||
if (
|
||||
(isSameDay(parseDate(date), from) ||
|
||||
isAfter(parseDate(date), from)) &&
|
||||
isBefore(parseDate(date), to)
|
||||
(isSameDay(parseDate(date), currentFrom) ||
|
||||
isAfter(parseDate(date), currentFrom)) &&
|
||||
isBefore(parseDate(date), currentTo)
|
||||
) {
|
||||
result[symbol][date] = {
|
||||
marketPrice: adjClose
|
||||
@ -299,6 +311,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
||||
}
|
||||
}
|
||||
|
||||
currentFrom = addYears(currentFrom, MAX_YEARS_PER_REQUEST);
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
throw new Error(
|
||||
|
Loading…
x
Reference in New Issue
Block a user