Browse Source

Unlinted and added env file

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

3
.env

@ -14,3 +14,6 @@ ACCESS_TOKEN_SALT=<INSERT_RANDOM_STRING>
ALPHA_VANTAGE_API_KEY= ALPHA_VANTAGE_API_KEY=
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer
JWT_SECRET_KEY=<INSERT_RANDOM_STRING> JWT_SECRET_KEY=<INSERT_RANDOM_STRING>
# If TZ different than US change it so that Yahoo finance query does not fail
# TZ='America/New_York'

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,14 +138,13 @@ 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 }
]; ];
} }
} }
@ -369,7 +368,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(
@ -381,7 +380,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
@ -395,7 +394,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;
}) })
); );
@ -425,7 +424,7 @@ export class YahooFinanceService implements DataProviderInterface {
Logger.error(error, 'YahooFinanceService'); Logger.error(error, 'YahooFinanceService');
} }
return {items}; return { items };
} }
private formatName({ private formatName({
@ -523,7 +522,7 @@ export class YahooFinanceService implements DataProviderInterface {
break; break;
} }
return {assetClass, assetSubClass}; return { assetClass, assetSubClass };
} }
private parseSector(aString: string): string { private parseSector(aString: string): string {
@ -563,8 +562,6 @@ 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