Browse Source

fix(api): tidy up imports and types

pull/4695/head
KenTandrian 4 months ago
parent
commit
11d35a8e0e
  1. 21
      apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts
  2. 33
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

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

@ -18,11 +18,13 @@ import {
} from '@prisma/client';
import { isISIN } from 'class-validator';
import { countries } from 'countries-list';
import yahooFinance from 'yahoo-finance2';
import type { Price } from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface';
import YahooFinance from 'yahoo-finance2';
import type { Price } from 'yahoo-finance2/esm/src/modules/quoteSummary-iface';
@Injectable()
export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
private readonly yahooFinance = new YahooFinance();
public constructor(
private readonly cryptocurrencyService: CryptocurrencyService
) {}
@ -99,8 +101,8 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
if (response.dataSource === 'YAHOO') {
yahooSymbol = symbol;
} else {
const { quotes } = await yahooFinance.search(response.isin);
yahooSymbol = quotes[0].symbol;
const { quotes } = await this.yahooFinance.search(response.isin);
yahooSymbol = quotes[0].symbol as string;
}
const { countries, sectors, url } =
@ -165,10 +167,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
if (isISIN(symbol)) {
try {
const { quotes } = await yahooFinance.search(symbol);
const { quotes } = await this.yahooFinance.search(symbol);
if (quotes?.[0]?.symbol) {
symbol = quotes[0].symbol;
symbol = quotes[0].symbol as string;
}
} catch {}
} else if (symbol?.endsWith(`-${DEFAULT_CURRENCY}`)) {
@ -177,7 +179,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
symbol = this.convertToYahooFinanceSymbol(symbol);
}
const assetProfile = await yahooFinance.quoteSummary(symbol, {
const assetProfile = await this.yahooFinance.quoteSummary(symbol, {
modules: ['price', 'summaryProfile', 'topHoldings']
});
@ -206,7 +208,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
for (const sectorWeighting of assetProfile.topHoldings
?.sectorWeightings ?? []) {
for (const [sector, weight] of Object.entries(sectorWeighting)) {
response.sectors.push({ weight, name: this.parseSector(sector) });
response.sectors.push({
name: this.parseSector(sector),
weight: weight as number
});
}
}
} else if (

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

@ -24,16 +24,19 @@ import {
import { Injectable, Logger } from '@nestjs/common';
import { DataSource, SymbolProfile } from '@prisma/client';
import { addDays, format, isSameDay } from 'date-fns';
import yahooFinance from 'yahoo-finance2';
import { ChartResultArray } from 'yahoo-finance2/dist/esm/src/modules/chart';
import YahooFinance from 'yahoo-finance2';
import { ChartResultArray } from 'yahoo-finance2/esm/src/modules/chart';
import {
HistoricalDividendsResult,
HistoricalHistoryResult
} from 'yahoo-finance2/dist/esm/src/modules/historical';
import { Quote } from 'yahoo-finance2/dist/esm/src/modules/quote';
} from 'yahoo-finance2/esm/src/modules/historical';
import { Quote } from 'yahoo-finance2/esm/src/modules/quote';
import { SearchQuoteNonYahoo } from 'yahoo-finance2/script/src/modules/search';
@Injectable()
export class YahooFinanceService implements DataProviderInterface {
private readonly yahooFinance = new YahooFinance();
public constructor(
private readonly cryptocurrencyService: CryptocurrencyService,
private readonly yahooFinanceDataEnhancerService: YahooFinanceDataEnhancerService
@ -70,7 +73,7 @@ export class YahooFinanceService implements DataProviderInterface {
try {
const historicalResult = this.convertToDividendResult(
await yahooFinance.chart(
await this.yahooFinance.chart(
this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol(
symbol
),
@ -119,7 +122,7 @@ export class YahooFinanceService implements DataProviderInterface {
try {
const historicalResult = this.convertToHistoricalResult(
await yahooFinance.chart(
await this.yahooFinance.chart(
this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol(
symbol
),
@ -188,7 +191,7 @@ export class YahooFinanceService implements DataProviderInterface {
>[] = [];
try {
quotes = await yahooFinance.quote(yahooFinanceSymbols);
quotes = await this.yahooFinance.quote(yahooFinanceSymbols);
} catch (error) {
Logger.error(error, 'YahooFinanceService');
@ -244,13 +247,15 @@ export class YahooFinanceService implements DataProviderInterface {
quoteTypes.push('INDEX');
}
const searchResult = await yahooFinance.search(query);
const searchResult = await this.yahooFinance.search(query);
const quotes = searchResult.quotes
.filter((quote) => {
// Filter out undefined symbols
return quote.symbol;
})
.filter(
(quote): quote is Exclude<typeof quote, SearchQuoteNonYahoo> => {
// Filter out undefined symbols
return !!quote.symbol;
}
)
.filter(({ quoteType, symbol }) => {
return (
(quoteType === 'CRYPTOCURRENCY' &&
@ -276,7 +281,7 @@ export class YahooFinanceService implements DataProviderInterface {
return true;
});
const marketData = await yahooFinance.quote(
const marketData = await this.yahooFinance.quote(
quotes.map(({ symbol }) => {
return symbol;
})
@ -336,7 +341,7 @@ export class YahooFinanceService implements DataProviderInterface {
private async getQuotesWithQuoteSummary(aYahooFinanceSymbols: string[]) {
const quoteSummaryPromises = aYahooFinanceSymbols.map((symbol) => {
return yahooFinance.quoteSummary(symbol).catch(() => {
return this.yahooFinance.quoteSummary(symbol).catch(() => {
Logger.error(
`Could not get quote summary for ${symbol}`,
'YahooFinanceService'

Loading…
Cancel
Save