Browse Source

Set default to unformatted

pull/1686/head
Agustin Alexander 3 years ago
parent
commit
1e5ea8ca58
No known key found for this signature in database GPG Key ID: 8CE7A1BA5D60D7EF
  1. 45
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

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

@ -1,15 +1,15 @@
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface'; import {LookupItem} from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; import {ConfigurationService} from '@ghostfolio/api/services/configuration.service';
import { CryptocurrencyService } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.service'; import {CryptocurrencyService} from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.service';
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import {DataProviderInterface} from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import { import {
IDataProviderHistoricalResponse, IDataProviderHistoricalResponse,
IDataProviderResponse IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces'; } from '@ghostfolio/api/services/interfaces/interfaces';
import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import {UNKNOWN_KEY} from '@ghostfolio/common/config';
import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper'; import {DATE_FORMAT, isCurrency} from '@ghostfolio/common/helper';
import { Granularity } from '@ghostfolio/common/types'; import {Granularity} from '@ghostfolio/common/types';
import { Injectable, Logger } from '@nestjs/common'; import {Injectable, Logger} from '@nestjs/common';
import { import {
AssetClass, AssetClass,
AssetSubClass, AssetSubClass,
@ -17,10 +17,10 @@ import {
SymbolProfile SymbolProfile
} from '@prisma/client'; } from '@prisma/client';
import Big from 'big.js'; import Big from 'big.js';
import { countries } from 'countries-list'; import {countries} from 'countries-list';
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 type { Price } from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface'; import type {Price} from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface';
@Injectable() @Injectable()
export class YahooFinanceService implements DataProviderInterface { export class YahooFinanceService implements DataProviderInterface {
@ -101,7 +101,7 @@ export class YahooFinanceService implements DataProviderInterface {
modules: ['price', 'summaryProfile', 'topHoldings'] modules: ['price', 'summaryProfile', 'topHoldings']
}); });
const { assetClass, assetSubClass } = this.parseAssetClass( const {assetClass, assetSubClass} = this.parseAssetClass(
assetProfile.price assetProfile.price
); );
@ -123,7 +123,7 @@ export class YahooFinanceService implements DataProviderInterface {
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({weight, name: this.parseSector(sector)});
} }
} }
} else if ( } else if (
@ -138,13 +138,14 @@ export class YahooFinanceService implements DataProviderInterface {
}); });
if (code) { if (code) {
response.countries = [{ code, weight: 1 }]; response.countries = [{code, weight: 1}];
}
} catch {
} }
} catch {}
if (assetProfile.summaryProfile?.sector) { if (assetProfile.summaryProfile?.sector) {
response.sectors = [ response.sectors = [
{ name: assetProfile.summaryProfile?.sector, weight: 1 } {name: assetProfile.summaryProfile?.sector, weight: 1}
]; ];
} }
} }
@ -368,7 +369,7 @@ export class YahooFinanceService implements DataProviderInterface {
// Filter out undefined symbols // Filter out undefined symbols
return quote.symbol; return quote.symbol;
}) })
.filter(({ quoteType, symbol }) => { .filter(({quoteType, symbol}) => {
return ( return (
(quoteType === 'CRYPTOCURRENCY' && (quoteType === 'CRYPTOCURRENCY' &&
this.cryptocurrencyService.isCryptocurrency( this.cryptocurrencyService.isCryptocurrency(
@ -380,7 +381,7 @@ export class YahooFinanceService implements DataProviderInterface {
['EQUITY', 'ETF', 'FUTURE', 'MUTUALFUND'].includes(quoteType) ['EQUITY', 'ETF', 'FUTURE', 'MUTUALFUND'].includes(quoteType)
); );
}) })
.filter(({ quoteType, symbol }) => { .filter(({quoteType, symbol}) => {
if (quoteType === 'CRYPTOCURRENCY') { if (quoteType === 'CRYPTOCURRENCY') {
// Only allow cryptocurrencies in base currency to avoid having redundancy in the database. // Only allow cryptocurrencies in base currency to avoid having redundancy in the database.
// Transactions need to be converted manually to the base currency before // Transactions need to be converted manually to the base currency before
@ -394,7 +395,7 @@ export class YahooFinanceService implements DataProviderInterface {
}); });
const marketData = await yahooFinance.quote( const marketData = await yahooFinance.quote(
quotes.map(({ symbol }) => { quotes.map(({symbol}) => {
return symbol; return symbol;
}) })
); );
@ -424,7 +425,7 @@ export class YahooFinanceService implements DataProviderInterface {
Logger.error(error, 'YahooFinanceService'); Logger.error(error, 'YahooFinanceService');
} }
return { items }; return {items};
} }
private formatName({ private formatName({
@ -522,7 +523,7 @@ export class YahooFinanceService implements DataProviderInterface {
break; break;
} }
return { assetClass, assetSubClass }; return {assetClass, assetSubClass};
} }
private parseSector(aString: string): string { private parseSector(aString: string): string {
@ -562,6 +563,8 @@ export class YahooFinanceService implements DataProviderInterface {
case 'utilities': case 'utilities':
sector = 'Utilities'; sector = 'Utilities';
break; break;
default:
sector = aString;
} }
return sector; return sector;

Loading…
Cancel
Save