diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e283e4c..5a25997f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Moved the improved symbol lookup results by removing the currency from the name of cryptocurrencies from experimental to general availability - Extracted the account selector to a reusable component - Upgraded `ng-extract-i18n-merge` from `3.3.0` to `3.4.0` +### Fixed + +- Fixed the missing mapping for Macau in the data enhancer for asset profile data via _Trackinsight_ + ## 3.53.0 - 2026-08-16 ### Changed diff --git a/apps/api/src/helper/country.helper.ts b/apps/api/src/helper/country.helper.ts index 2e6da5340..119f5e44c 100644 --- a/apps/api/src/helper/country.helper.ts +++ b/apps/api/src/helper/country.helper.ts @@ -3,9 +3,11 @@ import { countries } from 'countries-list'; export function getCountryCodeByName({ aliases = {}, + dataSource, name }: { aliases?: Record; + dataSource?: string; name: string; }): string { if (aliases[name]) { @@ -21,7 +23,11 @@ export function getCountryCodeByName({ if (name && name.toLowerCase() !== 'other') { const logger = new Logger('getCountryCodeByName'); - logger.warn(`Could not map the country "${name}" to a code`); + logger.warn( + `Could not map the country "${name}" to a code${ + dataSource ? ` (${dataSource})` : '' + }` + ); } return undefined; diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index 7f58448b7..23a8ce33c 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -17,6 +17,7 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { private static countriesMapping = { 'Czech Republic': 'CZ', + Macau: 'MO', 'Republic of Korea': 'KR', 'Russian Federation': 'RU', Turkey: 'TR', @@ -128,7 +129,8 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { )) { const code = getCountryCodeByName({ name, - aliases: TrackinsightDataEnhancerService.countriesMapping + aliases: TrackinsightDataEnhancerService.countriesMapping, + dataSource: this.getName() }); if (code) { diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 77e83b271..cd4a0436e 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -254,6 +254,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { const code = getCountryCodeByName({ aliases: YahooFinanceDataEnhancerService.countriesMapping, + dataSource: this.getName(), name: assetProfile.summaryProfile.country }); diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 8eca468cb..5484688b4 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -17,6 +17,7 @@ import { CreateOrderDto } from '@ghostfolio/common/dtos'; import { SubscriptionType } from '@ghostfolio/common/enums'; import { DATE_FORMAT, + formatAssetProfileName, getAssetProfileIdentifier, getCurrencyFromSymbol, getStartOfUtcDate, @@ -125,7 +126,11 @@ export class DataProviderService implements OnModuleInit { symbol, dataSource: DataSource[dataSource] }) - ] = { ...assetProfile, symbol }; + ] = { + ...assetProfile, + symbol, + name: formatAssetProfileName(assetProfile) + }; } }) ); @@ -897,16 +902,7 @@ export class DataProviderService implements OnModuleInit { lookupItem.dataProviderInfo.isPremium = false; } - if ( - lookupItem.assetSubClass === 'CRYPTOCURRENCY' && - user?.settings?.settings.isExperimentalFeatures - ) { - // Remove DEFAULT_CURRENCY at the end of cryptocurrency names - lookupItem.name = lookupItem.name.replace( - new RegExp(` ${DEFAULT_CURRENCY}$`), - '' - ); - } + lookupItem.name = formatAssetProfileName(lookupItem); return lookupItem; }) diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 2fd101396..c768de070 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -175,6 +175,7 @@ export class FinancialModelingPrepService return { code: getCountryCodeByName({ aliases: FinancialModelingPrepService.countriesMapping, + dataSource: this.getName(), name: countryName }), weight: parseFloat(`${weightPercentage}`) / 100 diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 9aab8d930..f7b79b247 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -261,6 +261,21 @@ export function extractNumberFromString({ } } +export function formatAssetProfileName({ + assetSubClass, + name +}: { + assetSubClass?: AssetSubClass; + name?: string; +}) { + if (assetSubClass === 'CRYPTOCURRENCY') { + // Remove DEFAULT_CURRENCY at the end of cryptocurrency names + return name?.replace(new RegExp(` ${DEFAULT_CURRENCY}$`), ''); + } + + return name; +} + export function formatMonthAndYear({ date, locale