Browse Source
Bugfix/handle unknown country names in data enhancer for asset profile data (#7574)
* Handle unknown country names
* Update changelog
pull/7551/head^2
Thomas Kaul
1 week ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with
23 additions and
9 deletions
-
CHANGELOG.md
-
apps/api/src/helper/country.helper.ts
-
apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
-
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
|
|
|
@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 |
|
|
|
|
|
|
|
- Improved the language localization for German (`de`) |
|
|
|
|
|
|
|
### Fixed |
|
|
|
|
|
|
|
- Resolved an issue with unknown country names in the country weightings of the _Financial Modeling Prep_ service |
|
|
|
- Resolved an issue with unknown country names in the data enhancer for asset profile data via _Trackinsight_ |
|
|
|
|
|
|
|
## 3.45.0 - 2026-08-08 |
|
|
|
|
|
|
|
### Added |
|
|
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { Logger } from '@nestjs/common'; |
|
|
|
import { countries } from 'countries-list'; |
|
|
|
|
|
|
|
export function getCountryCodeByName({ |
|
|
|
@ -17,5 +18,11 @@ export function getCountryCodeByName({ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (name) { |
|
|
|
const logger = new Logger('getCountryCodeByName'); |
|
|
|
|
|
|
|
logger.warn(`Could not map the country "${name}" to a code`); |
|
|
|
} |
|
|
|
|
|
|
|
return undefined; |
|
|
|
} |
|
|
|
|
|
|
|
@ -16,6 +16,7 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { |
|
|
|
private static baseUrl = 'https://www.trackinsight.com'; |
|
|
|
|
|
|
|
private static countriesMapping = { |
|
|
|
'Czech Republic': 'CZ', |
|
|
|
'Republic of Korea': 'KR', |
|
|
|
'Russian Federation': 'RU', |
|
|
|
Turkey: 'TR', |
|
|
|
@ -125,13 +126,14 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { |
|
|
|
for (const [name, value] of Object.entries<any>( |
|
|
|
holdings?.countries ?? {} |
|
|
|
)) { |
|
|
|
response.countries.push({ |
|
|
|
code: getCountryCodeByName({ |
|
|
|
name, |
|
|
|
aliases: TrackinsightDataEnhancerService.countriesMapping |
|
|
|
}), |
|
|
|
weight: value.weight |
|
|
|
const code = getCountryCodeByName({ |
|
|
|
name, |
|
|
|
aliases: TrackinsightDataEnhancerService.countriesMapping |
|
|
|
}); |
|
|
|
|
|
|
|
if (code) { |
|
|
|
response.countries.push({ code, weight: value.weight }); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -169,9 +169,6 @@ export class FinancialModelingPrepService |
|
|
|
.then((res) => res.json()); |
|
|
|
|
|
|
|
response.countries = etfCountryWeightings |
|
|
|
.filter(({ country: countryName }) => { |
|
|
|
return countryName.toLowerCase() !== 'other'; |
|
|
|
}) |
|
|
|
.map(({ country: countryName, weightPercentage }) => { |
|
|
|
return { |
|
|
|
code: getCountryCodeByName({ |
|
|
|
@ -180,6 +177,9 @@ export class FinancialModelingPrepService |
|
|
|
}), |
|
|
|
weight: parseFloat(`${weightPercentage}`) / 100 |
|
|
|
}; |
|
|
|
}) |
|
|
|
.filter(({ code }) => { |
|
|
|
return !!code; |
|
|
|
}); |
|
|
|
|
|
|
|
const etfHoldings = await this.fetchService |
|
|
|
|