@ -6,6 +6,7 @@ import {
IDataProviderHistoricalResponse ,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces' ;
import { UNKNOWN_KEY } from '@ghostfolio/common/config' ;
import { DATE_FORMAT , isCurrency } from '@ghostfolio/common/helper' ;
import { Granularity } from '@ghostfolio/common/types' ;
import { Injectable , Logger } from '@nestjs/common' ;
@ -90,7 +91,7 @@ export class YahooFinanceService implements DataProviderInterface {
try {
const symbol = this . convertToYahooFinanceSymbol ( aSymbol ) ;
const assetProfile = await yahooFinance . quoteSummary ( symbol , {
module s : [ 'price' , 'summaryProfile' ]
module s : [ 'price' , 'summaryProfile' , 'topHoldings' ]
} ) ;
const { assetClass , assetSubClass } = this . parseAssetClass (
@ -109,7 +110,16 @@ export class YahooFinanceService implements DataProviderInterface {
} ) ;
response . symbol = aSymbol ;
if (
if ( assetSubClass === AssetSubClass . MUTUALFUND ) {
response . sectors = [ ] ;
for ( const sectorWeighting of assetProfile . topHoldings
? . sectorWeightings ? ? [ ] ) {
for ( const [ sector , weight ] of Object . entries ( sectorWeighting ) ) {
response . sectors . push ( { weight , name : this.parseSector ( sector ) } ) ;
}
}
} else if (
assetSubClass === AssetSubClass . STOCK &&
assetProfile . summaryProfile ? . country
) {
@ -437,4 +447,46 @@ export class YahooFinanceService implements DataProviderInterface {
return { assetClass , assetSubClass } ;
}
private parseSector ( aString : string ) : string {
let sector = UNKNOWN_KEY ;
switch ( aString ) {
case 'basic_materials' :
sector = 'Basic Materials' ;
break ;
case 'communication_services' :
sector = 'Communication Services' ;
break ;
case 'consumer_cyclical' :
sector = 'Consumer Cyclical' ;
break ;
case 'consumer_defensive' :
sector = 'Consumer Staples' ;
break ;
case 'energy' :
sector = 'Energy' ;
break ;
case 'financial_services' :
sector = 'Financial Services' ;
break ;
case 'healthcare' :
sector = 'Healthcare' ;
break ;
case 'industrials' :
sector = 'Industrials' ;
break ;
case 'realestate' :
sector = 'Real Estate' ;
break ;
case 'technology' :
sector = 'Technology' ;
break ;
case 'utilities' :
sector = 'Utilities' ;
break ;
}
return sector ;
}
}