@ -1,6 +1,4 @@
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface' ;
import {
isCrypto ,
isGhostfolioScraperApiSymbol ,
isRakutenRapidApiSymbol
} from '@ghostfolio/common/helper' ;
@ -132,73 +130,45 @@ export class DataProviderService implements DataProviderInterface {
[ symbol : string ] : { [ date : string ] : IDataProviderHistoricalResponse } ;
} = { } ;
const promises : Promise < {
data : { [ date : string ] : IDataProviderHistoricalResponse } ;
symbol : string ;
} > [ ] = [ ] ;
for ( const { dataSource , symbol } of aDataGatheringItems ) {
switch ( dataSource ) {
case DataSource . ALPHA_VANTAGE : {
if ( this . configurationService . get ( 'ALPHA_VANTAGE_API_KEY' ) ) {
const data = await this . alphaVantageService . getHistorical (
[ symbol ] ,
undefined ,
from ,
to
const dataProvider = this . getDataProvider ( dataSource ) ;
if ( dataProvider . canHandle ( symbol ) ) {
promises . push (
dataProvider
. getHistorical ( [ symbol ] , undefined , from , to )
. then ( ( data ) = > ( { data : data?. [ symbol ] , symbol } ) )
) ;
result [ symbol ] = data ? . [ symbol ] ;
}
break ;
}
case DataSource . GHOSTFOLIO : {
if ( isGhostfolioScraperApiSymbol ( symbol ) ) {
const data = await this . ghostfolioScraperApiService . getHistorical (
[ symbol ] ,
undefined ,
from ,
to
) ;
result [ symbol ] = data ? . [ symbol ] ;
}
break ;
}
case DataSource . RAKUTEN : {
if (
isRakutenRapidApiSymbol ( symbol ) &&
this . configurationService . get ( 'RAKUTEN_RAPID_API_KEY' )
) {
const data = await this . rakutenRapidApiService . getHistorical (
[ symbol ] ,
undefined ,
from ,
to
) ;
result [ symbol ] = data ? . [ symbol ] ;
}
break ;
}
case DataSource . YAHOO : {
const data = await this . yahooFinanceService . getHistorical (
[ symbol ] ,
undefined ,
from ,
to
) ;
result [ symbol ] = data ? . [ symbol ] ;
break ;
}
}
const allData = await Promise . all ( promises ) ;
for ( const { data , symbol } of allData ) {
result [ symbol ] = data ;
}
return result ;
}
public async search ( aSymbol : string ) {
return this . getDataProvider ( ) . search ( aSymbol ) ;
return this . getDataProvider (
this . configurationService . get ( 'DATA_SOURCES' ) [ 0 ]
) . search ( aSymbol ) ;
}
private getDataProvider() {
switch ( this . configurationService . get ( 'DATA_SOURCES' ) [ 0 ] ) {
private getDataProvider ( providerName : DataSource ) {
switch ( providerName ) {
case DataSource . ALPHA_VANTAGE :
return this . alphaVantageService ;
case DataSource . YAHOO :
return this . yahooFinanceService ;
case DataSource . RAKUTEN :
return this . rakutenRapidApiService ;
case DataSource . GHOSTFOLIO :
return this . ghostfolioScraperApiService ;
default :
throw new Error ( 'No data provider has been found.' ) ;
}