Browse Source

Clean up

Co-Authored-By: Valentin Zickner <valentin@coderworks.de>
pull/410/head
Thomas 4 years ago
parent
commit
f68ee2cdb7
  1. 2
      apps/api/src/app/cache/cache.module.ts
  2. 2
      apps/api/src/app/info/info.module.ts
  3. 4
      apps/api/src/services/data-gathering.service.ts
  4. 2
      apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts
  5. 33
      apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
  6. 8
      apps/api/src/services/data-provider/data-provider.module.ts
  7. 21
      apps/api/src/services/data-provider/data-provider.service.ts
  8. 2
      apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts
  9. 11
      apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts
  10. 2
      apps/api/src/services/data-provider/rakuten-rapid-api/rakuten-rapid-api.service.ts
  11. 2
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

2
apps/api/src/app/cache/cache.module.ts

@ -2,12 +2,12 @@ import { CacheService } from '@ghostfolio/api/app/cache/cache.service';
import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering.service';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data.module';
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
import { Module } from '@nestjs/common';
import { CacheController } from './cache.controller';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
@Module({
imports: [DataProviderModule, ExchangeRateDataModule, RedisCacheModule],

2
apps/api/src/app/info/info.module.ts

@ -1,5 +1,6 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering.service';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data.module';
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
import { Module } from '@nestjs/common';
@ -7,7 +8,6 @@ import { JwtModule } from '@nestjs/jwt';
import { InfoController } from './info.controller';
import { InfoService } from './info.service';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
@Module({
imports: [

4
apps/api/src/services/data-gathering.service.ts

@ -130,6 +130,10 @@ export class DataGatheringService {
const currentData = await this.dataProviderService.get(dataGatheringItems);
Object.entries(currentData).forEach((symbol) => {
console.log(symbol[0], symbol[1]);
});
for (const [
symbol,
{

2
apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts

@ -6,11 +6,11 @@ import { Injectable } from '@nestjs/common';
import { DataSource } from '@prisma/client';
import { isAfter, isBefore, parse } from 'date-fns';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '../../interfaces/interfaces';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import { IAlphaVantageHistoricalResponse } from './interfaces/interfaces';
@Injectable()

33
apps/api/src/services/data-provider/trackinsight-enhancer/trackinsight-enhancer.service.ts → apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts

@ -2,21 +2,24 @@ import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/in
import { IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces';
import bent from 'bent';
const countries = require('countries-list/dist/countries.json');
const getJSON = bent('json');
const sectorsMapping = {
'Consumer Discretionary': 'Consumer Cyclical',
'Consumer Defensive': 'Consumer Staples',
'Health Care': 'Healthcare',
'Information Technology': 'Technology'
};
export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
private static countries = require('countries-list/dist/countries.json');
private static sectorsMapping = {
'Consumer Discretionary': 'Consumer Cyclical',
'Consumer Defensive': 'Consumer Staples',
'Health Care': 'Healthcare',
'Information Technology': 'Technology'
};
export class TrackinsightEnhancerService implements DataEnhancerInterface {
public async enhance(
symbol: string,
response: IDataProviderResponse
): Promise<IDataProviderResponse> {
public async enhance({
response,
symbol
}: {
response: IDataProviderResponse;
symbol: string;
}): Promise<IDataProviderResponse> {
if (
!(response.assetClass === 'EQUITY' && response.assetSubClass === 'ETF')
) {
@ -36,7 +39,9 @@ export class TrackinsightEnhancerService implements DataEnhancerInterface {
for (const [name, value] of Object.entries<any>(holdings.countries)) {
let countryCode: string;
for (const [key, country] of Object.entries<any>(countries)) {
for (const [key, country] of Object.entries<any>(
TrackinsightDataEnhancerService.countries
)) {
if (country.name === name) {
countryCode = key;
break;
@ -54,7 +59,7 @@ export class TrackinsightEnhancerService implements DataEnhancerInterface {
response.sectors = [];
for (const [name, value] of Object.entries<any>(holdings.sectors)) {
response.sectors.push({
name: sectorsMapping[name] ?? name,
name: TrackinsightDataEnhancerService.sectorsMapping[name] ?? name,
weight: value.weight
});
}

8
apps/api/src/services/data-provider/data-provider.module.ts

@ -1,4 +1,5 @@
import { ConfigurationModule } from '@ghostfolio/api/services/configuration.module';
import { TrackinsightDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/trackinsight/trackinsight.service';
import { GhostfolioScraperApiService } from '@ghostfolio/api/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service';
import { RakutenRapidApiService } from '@ghostfolio/api/services/data-provider/rakuten-rapid-api/rakuten-rapid-api.service';
import { YahooFinanceService } from '@ghostfolio/api/services/data-provider/yahoo-finance/yahoo-finance.service';
@ -7,7 +8,6 @@ import { Module } from '@nestjs/common';
import { AlphaVantageService } from './alpha-vantage/alpha-vantage.service';
import { DataProviderService } from './data-provider.service';
import { TrackinsightEnhancerService } from '@ghostfolio/api/services/data-provider/trackinsight-enhancer/trackinsight-enhancer.service';
@Module({
imports: [ConfigurationModule, PrismaModule],
@ -16,12 +16,12 @@ import { TrackinsightEnhancerService } from '@ghostfolio/api/services/data-provi
DataProviderService,
GhostfolioScraperApiService,
RakutenRapidApiService,
TrackinsightEnhancerService,
TrackinsightDataEnhancerService,
YahooFinanceService,
{
inject: [TrackinsightDataEnhancerService],
provide: 'DataEnhancers',
useFactory: (trackinsight) => [trackinsight],
inject: [TrackinsightEnhancerService]
useFactory: (trackinsight) => [trackinsight]
}
],
exports: [DataProviderService, GhostfolioScraperApiService]

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

@ -1,5 +1,6 @@
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import {
IDataGatheringItem,
IDataProviderHistoricalResponse,
@ -17,7 +18,6 @@ import { AlphaVantageService } from './alpha-vantage/alpha-vantage.service';
import { GhostfolioScraperApiService } from './ghostfolio-scraper-api/ghostfolio-scraper-api.service';
import { RakutenRapidApiService } from './rakuten-rapid-api/rakuten-rapid-api.service';
import { YahooFinanceService } from './yahoo-finance/yahoo-finance.service';
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
@Injectable()
export class DataProviderService {
@ -52,14 +52,21 @@ export class DataProviderService {
for (const symbol of Object.keys(response)) {
let promise = Promise.resolve(response[symbol]);
for (const dataEnhancer of this.dataEnhancers) {
promise = promise.then((r) =>
dataEnhancer.enhance(symbol, r).catch((e) => {
console.error(`Failed to enhance data for symbol ${symbol}`, e);
return r;
})
promise = promise.then((currentResponse) =>
dataEnhancer
.enhance({ symbol, response: currentResponse })
.catch((error) => {
console.error(
`Failed to enhance data for symbol ${symbol}`,
error
);
return currentResponse;
})
);
}
promises.push(promise.then((r) => (response[symbol] = r)));
promises.push(
promise.then((currentResponse) => (response[symbol] = currentResponse))
);
}
await Promise.all(promises);

2
apps/api/src/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service.ts

@ -12,13 +12,13 @@ import * as bent from 'bent';
import * as cheerio from 'cheerio';
import { format } from 'date-fns';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import {
IDataGatheringItem,
IDataProviderHistoricalResponse,
IDataProviderResponse,
MarketState
} from '../../interfaces/interfaces';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import { ScraperConfig } from './interfaces/scraper-config.interface';
@Injectable()

11
apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts

@ -1,8 +1,11 @@
import { IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces';
export interface DataEnhancerInterface {
enhance(
symbol: string,
response: IDataProviderResponse
): Promise<IDataProviderResponse>;
enhance({
response,
symbol
}: {
response: IDataProviderResponse;
symbol: string;
}): Promise<IDataProviderResponse>;
}

2
apps/api/src/services/data-provider/rakuten-rapid-api/rakuten-rapid-api.service.ts

@ -14,12 +14,12 @@ import { DataSource } from '@prisma/client';
import * as bent from 'bent';
import { format, subMonths, subWeeks, subYears } from 'date-fns';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import {
IDataProviderHistoricalResponse,
IDataProviderResponse,
MarketState
} from '../../interfaces/interfaces';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
@Injectable()
export class RakutenRapidApiService implements DataProviderInterface {

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

@ -10,12 +10,12 @@ import { countries } from 'countries-list';
import { format } from 'date-fns';
import * as yahooFinance from 'yahoo-finance';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import {
IDataProviderHistoricalResponse,
IDataProviderResponse,
MarketState
} from '../../interfaces/interfaces';
import { DataProviderInterface } from '../interfaces/data-provider.interface';
import {
IYahooFinanceHistoricalResponse,
IYahooFinancePrice,

Loading…
Cancel
Save