@ -86,12 +86,11 @@ export class DataProviderService implements OnModuleInit {
return false ;
}
// TODO: Change symbol in response to assetProfileIdentifier
public async getAssetProfiles ( items : AssetProfileIdentifier [ ] ) : Promise < {
[ symbol : string ] : Partial < SymbolProfile > ;
[ assetProfileIdentifier : string ] : Partial < SymbolProfile > ;
} > {
const response : {
[ symbol : string ] : Partial < SymbolProfile > ;
[ assetProfileIdentifier : string ] : Partial < SymbolProfile > ;
} = { } ;
const itemsGroupedByDataSource = groupBy ( items , ( { dataSource } ) = > {
@ -117,7 +116,12 @@ export class DataProviderService implements OnModuleInit {
promises . push (
promise . then ( ( assetProfile ) = > {
if ( isCurrency ( assetProfile ? . currency ) ) {
response [ symbol ] = assetProfile ;
response [
getAssetProfileIdentifier ( {
symbol ,
dataSource : DataSource [ dataSource ]
} )
] = { . . . assetProfile , symbol } ;
}
} )
) ;
@ -283,7 +287,7 @@ export class DataProviderService implements OnModuleInit {
symbol
}
] )
) ? . [ symbol ] ;
) ? . [ assetProfileIdentifier ] ;
} catch { }
if ( ! assetProfile ? . name ) {
@ -333,17 +337,20 @@ export class DataProviderService implements OnModuleInit {
} ) ;
}
// TODO: Change symbol in response to assetProfileIdentifier
public async getHistorical (
aItems : AssetProfileIdentifier [ ] ,
aGranularity : Granularity = 'month' ,
from : Date ,
to : Date
) : Promise < {
[ symbol : string ] : { [ date : string ] : DataProviderHistoricalResponse } ;
[ assetProfileIdentifier : string ] : {
[ date : string ] : DataProviderHistoricalResponse ;
} ;
} > {
let response : {
[ symbol : string ] : { [ date : string ] : DataProviderHistoricalResponse } ;
[ assetProfileIdentifier : string ] : {
[ date : string ] : DataProviderHistoricalResponse ;
} ;
} = { } ;
if ( isEmpty ( aItems ) || ! isValid ( from ) || ! isValid ( to ) ) {
@ -383,13 +390,20 @@ export class DataProviderService implements OnModuleInit {
ORDER BY date ; ` ;
response = marketDataByGranularity . reduce ( ( r , marketData ) = > {
const { date , marketPrice , symbol } = marketData ;
const { dataSource , dat e , marketPrice , symbol } = marketData ;
if ( ! r [ symbol ] ) {
r [ symbol ] = { } ;
const assetProfileIdentifier = getAssetProfileIdentifier ( {
dataSource ,
symbol
} ) ;
if ( ! r [ assetProfileIdentifier ] ) {
r [ assetProfileIdentifier ] = { } ;
}
r [ symbol ] [ format ( new Date ( date ) , DATE_FORMAT ) ] = { marketPrice } ;
r [ assetProfileIdentifier ] [ format ( new Date ( date ) , DATE_FORMAT ) ] = {
marketPrice
} ;
return r ;
} , { } ) ;
@ -400,7 +414,6 @@ export class DataProviderService implements OnModuleInit {
}
}
// TODO: Change symbol in response to assetProfileIdentifier
public async getHistoricalRaw ( {
assetProfileIdentifiers ,
from ,
@ -410,7 +423,9 @@ export class DataProviderService implements OnModuleInit {
from : Date ;
to : Date ;
} ) : Promise < {
[ symbol : string ] : { [ date : string ] : DataProviderHistoricalResponse } ;
[ assetProfileIdentifier : string ] : {
[ date : string ] : DataProviderHistoricalResponse ;
} ;
} > {
for ( const { currency , rootCurrency } of DERIVED_CURRENCIES ) {
if (
@ -443,11 +458,14 @@ export class DataProviderService implements OnModuleInit {
) ;
const result : {
[ symbol : string ] : { [ date : string ] : DataProviderHistoricalResponse } ;
[ assetProfileIdentifier : string ] : {
[ date : string ] : DataProviderHistoricalResponse ;
} ;
} = { } ;
const promises : Promise < {
data : { [ date : string ] : DataProviderHistoricalResponse } ;
dataSource : DataSource ;
symbol : string ;
} > [ ] = [ ] ;
for ( const { dataSource , symbol } of assetProfileIdentifiers ) {
@ -465,6 +483,7 @@ export class DataProviderService implements OnModuleInit {
promises . push (
Promise . resolve ( {
data ,
dataSource ,
symbol
} )
) ;
@ -478,7 +497,7 @@ export class DataProviderService implements OnModuleInit {
requestTimeout : ms ( '30 seconds' )
} )
. then ( ( data ) = > {
return { symbol , data : data?. [ symbol ] } ;
return { dataSource , symbol , data : data?. [ symbol ] } ;
} )
) ;
}
@ -488,22 +507,26 @@ export class DataProviderService implements OnModuleInit {
try {
const allData = await Promise . all ( promises ) ;
for ( const { data , symbol } of allData ) {
for ( const { data , dataSource , symbol } of allData ) {
const currency = DERIVED_CURRENCIES . find ( ( { rootCurrency } ) = > {
return ` ${ DEFAULT_CURRENCY } ${ rootCurrency } ` === symbol ;
} ) ;
if ( currency ) {
// Add derived currency
result [ ` ${ DEFAULT_CURRENCY } ${ currency . currency } ` ] =
this . transformHistoricalData ( {
allData ,
currency : ` ${ DEFAULT_CURRENCY } ${ currency . rootCurrency } ` ,
factor : currency.factor
} ) ;
result [
getAssetProfileIdentifier ( {
dataSource ,
symbol : ` ${ DEFAULT_CURRENCY } ${ currency . currency } `
} )
] = this . transformHistoricalData ( {
allData ,
currency : ` ${ DEFAULT_CURRENCY } ${ currency . rootCurrency } ` ,
factor : currency.factor
} ) ;
}
result [ symbol ] = data ;
result [ getAssetProfileIdentifier ( { dataSource , symbol } ) ] = data ;
}
} catch ( error ) {
this . logger . error ( error ) ;