Browse Source

Resolve error when fetching dividends for date ranges without events

pull/7612/head
Thomas Kaul 2 weeks ago
parent
commit
9a80782cd1
  1. 28
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

28
apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

@ -22,7 +22,7 @@ import {
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { DataSource, SymbolProfile } from '@prisma/client'; import { DataSource, SymbolProfile } from '@prisma/client';
import { addDays, format, isSameDay } from 'date-fns'; import { addDays, format, isSameDay } from 'date-fns';
import { StatusCodes } from 'http-status-codes'; import { getReasonPhrase, StatusCodes } from 'http-status-codes';
import { uniqBy } from 'lodash'; import { uniqBy } from 'lodash';
import YahooFinance from 'yahoo-finance2'; import YahooFinance from 'yahoo-finance2';
import { ChartResultArray } from 'yahoo-finance2/esm/src/modules/chart'; import { ChartResultArray } from 'yahoo-finance2/esm/src/modules/chart';
@ -81,10 +81,6 @@ export class YahooFinanceService implements DataProviderInterface {
symbol, symbol,
to to
}: GetDividendsParams) { }: GetDividendsParams) {
if (isSameDay(from, to)) {
to = addDays(to, 1);
}
try { try {
const historicalResult = this.convertToDividendResult( const historicalResult = this.convertToDividendResult(
await this.yahooFinance.chart( await this.yahooFinance.chart(
@ -95,7 +91,10 @@ export class YahooFinanceService implements DataProviderInterface {
events: 'dividends', events: 'dividends',
interval: granularity === 'month' ? '1mo' : '1d', interval: granularity === 'month' ? '1mo' : '1d',
period1: format(from, DATE_FORMAT), period1: format(from, DATE_FORMAT),
period2: format(to, DATE_FORMAT) period2: format(
isSameDay(from, to) ? addDays(to, 1) : to,
DATE_FORMAT
)
} }
) )
); );
@ -114,19 +113,16 @@ export class YahooFinanceService implements DataProviderInterface {
const message = `Could not get dividends for ${symbol} (${this.getName()}) from ${format( const message = `Could not get dividends for ${symbol} (${this.getName()}) from ${format(
from, from,
DATE_FORMAT DATE_FORMAT
)} to ${format(to, DATE_FORMAT)}`; )} to ${format(to, DATE_FORMAT)}: [${error?.name}] ${error?.message}`;
if (error.message === YahooFinanceService.DELISTED_ERROR_MESSAGE) { if (
this.logger.warn( error?.code === StatusCodes.TOO_MANY_REQUESTS ||
`${message}: ${YahooFinanceService.DELISTED_ERROR_MESSAGE}` error?.message === YahooFinanceService.DELISTED_ERROR_MESSAGE ||
); error?.message?.includes(getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS))
} else if (
error.name === 'HTTPError' &&
error.code === StatusCodes.TOO_MANY_REQUESTS
) { ) {
this.logger.warn(`${message}: Rate limit exceeded`); this.logger.warn(message);
} else { } else {
this.logger.error(`${message}: [${error.name}] ${error.message}`); this.logger.error(message);
} }
return {}; return {};

Loading…
Cancel
Save