@ -77,7 +77,9 @@ export class DataProviderService implements OnModuleInit {
useCache : false
useCache : false
} ) ;
} ) ;
if ( quotes [ symbol ] ? . marketPrice > 0 ) {
if (
quotes [ getAssetProfileIdentifier ( { dataSource , symbol } ) ] ? . marketPrice > 0
) {
return true ;
return true ;
}
}
@ -514,7 +516,6 @@ export class DataProviderService implements OnModuleInit {
return result ;
return result ;
}
}
// TODO: Change symbol in response to assetProfileIdentifier
public async getQuotes ( {
public async getQuotes ( {
items ,
items ,
requestTimeout ,
requestTimeout ,
@ -526,10 +527,12 @@ export class DataProviderService implements OnModuleInit {
useCache? : boolean ;
useCache? : boolean ;
user? : UserWithSettings ;
user? : UserWithSettings ;
} ) : Promise < {
} ) : Promise < {
[ symbol : string ] : DataProviderResponse ;
[ assetProfileIdentifier : string ] : DataProviderResponse ;
} > {
} > {
const response : {
const response : {
[ symbol : string ] : DataProviderResponse ;
[ assetProfileIdentifier : string ] : DataProviderResponse & {
symbol : string ;
} ;
} = { } ;
} = { } ;
const startTimeTotal = performance . now ( ) ;
const startTimeTotal = performance . now ( ) ;
@ -538,11 +541,17 @@ export class DataProviderService implements OnModuleInit {
return symbol === ` ${ DEFAULT_CURRENCY } USX ` ;
return symbol === ` ${ DEFAULT_CURRENCY } USX ` ;
} )
} )
) {
) {
response [ ` ${ DEFAULT_CURRENCY } USX ` ] = {
response [
getAssetProfileIdentifier ( {
dataSource : this.getDataSourceForExchangeRates ( ) ,
symbol : ` ${ DEFAULT_CURRENCY } USX `
} )
] = {
currency : 'USX' ,
currency : 'USX' ,
dataSource : this.getDataSourceForExchangeRates ( ) ,
dataSource : this.getDataSourceForExchangeRates ( ) ,
marketPrice : 100 ,
marketPrice : 100 ,
marketState : 'open'
marketState : 'open' ,
symbol : ` ${ DEFAULT_CURRENCY } USX `
} ;
} ;
}
}
@ -557,8 +566,13 @@ export class DataProviderService implements OnModuleInit {
if ( quoteString ) {
if ( quoteString ) {
try {
try {
const cachedDataProviderResponse = JSON . parse ( quoteString ) ;
const cachedDataProviderResponse = JSON . parse (
response [ symbol ] = cachedDataProviderResponse ;
quoteString
) as DataProviderResponse ;
response [ getAssetProfileIdentifier ( { dataSource , symbol } ) ] = {
. . . cachedDataProviderResponse ,
symbol
} ;
continue ;
continue ;
} catch { }
} catch { }
}
}
@ -646,14 +660,19 @@ export class DataProviderService implements OnModuleInit {
continue ;
continue ;
}
}
response [ symbol ] = dataProviderResponse ;
response [
getAssetProfileIdentifier ( {
symbol ,
dataSource : DataSource [ dataSource ]
} )
] = { . . . dataProviderResponse , symbol } ;
this . redisCacheService . set (
this . redisCacheService . set (
this . redisCacheService . getQuoteKey ( {
this . redisCacheService . getQuoteKey ( {
symbol ,
symbol ,
dataSource : DataSource [ dataSource ]
dataSource : DataSource [ dataSource ]
} ) ,
} ) ,
JSON . stringify ( response [ symbol ] ) ,
JSON . stringify ( dataProviderResponse ) ,
this . configurationService . get ( 'CACHE_QUOTES_TTL' )
this . configurationService . get ( 'CACHE_QUOTES_TTL' )
) ;
) ;
@ -663,7 +682,7 @@ export class DataProviderService implements OnModuleInit {
rootCurrency
rootCurrency
} of DERIVED_CURRENCIES ) {
} of DERIVED_CURRENCIES ) {
if ( symbol === ` ${ DEFAULT_CURRENCY } ${ rootCurrency } ` ) {
if ( symbol === ` ${ DEFAULT_CURRENCY } ${ rootCurrency } ` ) {
response [ ` ${ DEFAULT_CURRENCY } ${ currency } ` ] = {
const derivedDataProviderResponse : DataProviderResponse = {
. . . dataProviderResponse ,
. . . dataProviderResponse ,
currency ,
currency ,
marketPrice : new Big (
marketPrice : new Big (
@ -674,12 +693,22 @@ export class DataProviderService implements OnModuleInit {
marketState : 'open'
marketState : 'open'
} ;
} ;
response [
getAssetProfileIdentifier ( {
dataSource : DataSource [ dataSource ] ,
symbol : ` ${ DEFAULT_CURRENCY } ${ currency } `
} )
] = {
. . . derivedDataProviderResponse ,
symbol : ` ${ DEFAULT_CURRENCY } ${ currency } `
} ;
this . redisCacheService . set (
this . redisCacheService . set (
this . redisCacheService . getQuoteKey ( {
this . redisCacheService . getQuoteKey ( {
dataSource : DataSource [ dataSource ] ,
dataSource : DataSource [ dataSource ] ,
symbol : ` ${ DEFAULT_CURRENCY } ${ currency } `
symbol : ` ${ DEFAULT_CURRENCY } ${ currency } `
} ) ,
} ) ,
JSON . stringify ( response [ ` ${ DEFAULT_CURRENCY } ${ currency } ` ] ) ,
JSON . stringify ( derivedDataProviderResponse ) ,
this . configurationService . get ( 'CACHE_QUOTES_TTL' )
this . configurationService . get ( 'CACHE_QUOTES_TTL' )
) ;
) ;
}
}
@ -697,21 +726,21 @@ export class DataProviderService implements OnModuleInit {
try {
try {
await this . marketDataService . updateMany ( {
await this . marketDataService . updateMany ( {
data : Object.key s ( response )
data : Object.value s ( response )
. filter ( ( symbol ) = > {
. filter ( ( { marketPrice , marketState } ) = > {
return (
return (
isNumber ( response [ symbol ] . marketPrice ) &&
isNumber ( marketPrice ) &&
response [ symbol ] . marketPrice > 0 &&
marketPrice > 0 &&
response [ symbol ] . marketState === 'open'
marketState === 'open'
) ;
) ;
} )
} )
. map ( ( symbol ) = > {
. map ( ( dataProviderResponse ) = > {
return {
return {
symbol ,
dataSource : dataProviderResponse.dataSource ,
dataSource : response [ symbol ] . dataSource ,
date : getStartOfUtcDate ( new Date ( ) ) ,
date : getStartOfUtcDate ( new Date ( ) ) ,
marketPrice : response [ symbol ] . marketPrice ,
marketPrice : dataProviderResponse.marketPrice ,
state : 'INTRADAY'
state : 'INTRADAY' ,
symbol : dataProviderResponse . symbol
} ;
} ;
} )
} )
} ) ;
} ) ;