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'; } from '@prisma/client';
import { isISIN } from 'class-validator'; import { isISIN } from 'class-validator';
import { countries } from 'countries-list'; import { countries } from 'countries-list';
import yahooFinance from 'yahoo-finance2'; import YahooFinance from 'yahoo-finance2';
import type { Price } from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface'; import type { Price } from 'yahoo-finance2/esm/src/modules/quoteSummary-iface';
@Injectable() @Injectable()
export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
private readonly yahooFinance = new YahooFinance();
public constructor( public constructor(
private readonly cryptocurrencyService: CryptocurrencyService private readonly cryptocurrencyService: CryptocurrencyService
) {} ) {}
@ -99,8 +101,8 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
if (response.dataSource === 'YAHOO') { if (response.dataSource === 'YAHOO') {
yahooSymbol = symbol; yahooSymbol = symbol;
} else { } else {
const { quotes } = await yahooFinance.search(response.isin); const { quotes } = await this.yahooFinance.search(response.isin);
yahooSymbol = quotes[0].symbol; yahooSymbol = quotes[0].symbol as string;
} }
const { countries, sectors, url } = const { countries, sectors, url } =
@ -165,10 +167,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
if (isISIN(symbol)) { if (isISIN(symbol)) {
try { try {
const { quotes } = await yahooFinance.search(symbol); const { quotes } = await this.yahooFinance.search(symbol);
if (quotes?.[0]?.symbol) { if (quotes?.[0]?.symbol) {
symbol = quotes[0].symbol; symbol = quotes[0].symbol as string;
} }
} catch {} } catch {}
} else if (symbol?.endsWith(`-${DEFAULT_CURRENCY}`)) { } else if (symbol?.endsWith(`-${DEFAULT_CURRENCY}`)) {
@ -177,7 +179,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
symbol = this.convertToYahooFinanceSymbol(symbol); symbol = this.convertToYahooFinanceSymbol(symbol);
} }
const assetProfile = await yahooFinance.quoteSummary(symbol, { const assetProfile = await this.yahooFinance.quoteSummary(symbol, {
modules: ['price', 'summaryProfile', 'topHoldings'] modules: ['price', 'summaryProfile', 'topHoldings']
}); });
@ -206,7 +208,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
for (const sectorWeighting of assetProfile.topHoldings for (const sectorWeighting of assetProfile.topHoldings
?.sectorWeightings ?? []) { ?.sectorWeightings ?? []) {
for (const [sector, weight] of Object.entries(sectorWeighting)) { 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 ( } 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 { 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 yahooFinance from 'yahoo-finance2'; import YahooFinance from 'yahoo-finance2';
import { ChartResultArray } from 'yahoo-finance2/dist/esm/src/modules/chart'; import { ChartResultArray } from 'yahoo-finance2/esm/src/modules/chart';
import { import {
HistoricalDividendsResult, HistoricalDividendsResult,
HistoricalHistoryResult HistoricalHistoryResult
} from 'yahoo-finance2/dist/esm/src/modules/historical'; } from 'yahoo-finance2/esm/src/modules/historical';
import { Quote } from 'yahoo-finance2/dist/esm/src/modules/quote'; import { Quote } from 'yahoo-finance2/esm/src/modules/quote';
import { SearchQuoteNonYahoo } from 'yahoo-finance2/script/src/modules/search';
@Injectable() @Injectable()
export class YahooFinanceService implements DataProviderInterface { export class YahooFinanceService implements DataProviderInterface {
private readonly yahooFinance = new YahooFinance();
public constructor( public constructor(
private readonly cryptocurrencyService: CryptocurrencyService, private readonly cryptocurrencyService: CryptocurrencyService,
private readonly yahooFinanceDataEnhancerService: YahooFinanceDataEnhancerService private readonly yahooFinanceDataEnhancerService: YahooFinanceDataEnhancerService
@ -70,7 +73,7 @@ export class YahooFinanceService implements DataProviderInterface {
try { try {
const historicalResult = this.convertToDividendResult( const historicalResult = this.convertToDividendResult(
await yahooFinance.chart( await this.yahooFinance.chart(
this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol( this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol(
symbol symbol
), ),
@ -119,7 +122,7 @@ export class YahooFinanceService implements DataProviderInterface {
try { try {
const historicalResult = this.convertToHistoricalResult( const historicalResult = this.convertToHistoricalResult(
await yahooFinance.chart( await this.yahooFinance.chart(
this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol( this.yahooFinanceDataEnhancerService.convertToYahooFinanceSymbol(
symbol symbol
), ),
@ -188,7 +191,7 @@ export class YahooFinanceService implements DataProviderInterface {
>[] = []; >[] = [];
try { try {
quotes = await yahooFinance.quote(yahooFinanceSymbols); quotes = await this.yahooFinance.quote(yahooFinanceSymbols);
} catch (error) { } catch (error) {
Logger.error(error, 'YahooFinanceService'); Logger.error(error, 'YahooFinanceService');
@ -244,13 +247,15 @@ export class YahooFinanceService implements DataProviderInterface {
quoteTypes.push('INDEX'); quoteTypes.push('INDEX');
} }
const searchResult = await yahooFinance.search(query); const searchResult = await this.yahooFinance.search(query);
const quotes = searchResult.quotes const quotes = searchResult.quotes
.filter((quote) => { .filter(
// Filter out undefined symbols (quote): quote is Exclude<typeof quote, SearchQuoteNonYahoo> => {
return quote.symbol; // Filter out undefined symbols
}) return !!quote.symbol;
}
)
.filter(({ quoteType, symbol }) => { .filter(({ quoteType, symbol }) => {
return ( return (
(quoteType === 'CRYPTOCURRENCY' && (quoteType === 'CRYPTOCURRENCY' &&
@ -276,7 +281,7 @@ export class YahooFinanceService implements DataProviderInterface {
return true; return true;
}); });
const marketData = await yahooFinance.quote( const marketData = await this.yahooFinance.quote(
quotes.map(({ symbol }) => { quotes.map(({ symbol }) => {
return symbol; return symbol;
}) })
@ -336,7 +341,7 @@ export class YahooFinanceService implements DataProviderInterface {
private async getQuotesWithQuoteSummary(aYahooFinanceSymbols: string[]) { private async getQuotesWithQuoteSummary(aYahooFinanceSymbols: string[]) {
const quoteSummaryPromises = aYahooFinanceSymbols.map((symbol) => { const quoteSummaryPromises = aYahooFinanceSymbols.map((symbol) => {
return yahooFinance.quoteSummary(symbol).catch(() => { return this.yahooFinance.quoteSummary(symbol).catch(() => {
Logger.error( Logger.error(
`Could not get quote summary for ${symbol}`, `Could not get quote summary for ${symbol}`,
'YahooFinanceService' 'YahooFinanceService'

Loading…
Cancel
Save