From db6796d4b7eeb9c5913e60acc8bc4e611c80c058 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 21 Aug 2026 17:28:11 +0200 Subject: [PATCH] Fix unused custom asset profiles created by activities import --- apps/api/src/app/import/import.helper.ts | 4 +-- apps/api/src/app/import/import.service.ts | 4 +-- ...s => asset-profile-to-create.interface.ts} | 0 .../data-provider/data-provider.service.ts | 28 +++++++++---------- 4 files changed, 17 insertions(+), 19 deletions(-) rename apps/api/src/app/import/interfaces/{interfaces.ts => asset-profile-to-create.interface.ts} (100%) diff --git a/apps/api/src/app/import/import.helper.ts b/apps/api/src/app/import/import.helper.ts index fb7895cb4..85c531341 100644 --- a/apps/api/src/app/import/import.helper.ts +++ b/apps/api/src/app/import/import.helper.ts @@ -1,7 +1,7 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { Activity } from '@ghostfolio/common/interfaces'; -import { AssetProfileToCreate } from './interfaces/interfaces'; +import { AssetProfileToCreate } from './interfaces/asset-profile-to-create.interface'; /** * Returns the asset profiles which at least one activity of the import uses. @@ -13,7 +13,7 @@ export function getAssetProfilesToCreate({ activities, assetProfiles }: { - activities: Partial[]; + activities: Pick[]; assetProfiles: AssetProfileToCreate[]; }) { const assetProfileIdentifiersToImport = new Set( diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index aa34b24e9..5866be0e9 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -49,7 +49,7 @@ import { randomUUID } from 'node:crypto'; import { ImportDataDto } from './import-data.dto'; import { getAssetProfilesToCreate } from './import.helper'; -import { AssetProfileToCreate } from './interfaces/interfaces'; +import { AssetProfileToCreate } from './interfaces/asset-profile-to-create.interface'; @Injectable() export class ImportService { @@ -966,7 +966,7 @@ export class ImportService { activitiesDto: Partial[]; userCurrency: string; userId: string; - }): Promise[]> { + }): Promise<(Partial & Pick)[]> { const { activities: existingActivities } = await this.activitiesService.getActivities({ userCurrency, diff --git a/apps/api/src/app/import/interfaces/interfaces.ts b/apps/api/src/app/import/interfaces/asset-profile-to-create.interface.ts similarity index 100% rename from apps/api/src/app/import/interfaces/interfaces.ts rename to apps/api/src/app/import/interfaces/asset-profile-to-create.interface.ts 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 0912fd4f7..4b1fdfff1 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -292,6 +292,11 @@ export class DataProviderService implements OnModuleInit { currency, dataSource, symbol, + ...omit(assetProfileInImport ?? {}, [ + 'dataSource', + 'marketData', + 'symbol' + ]), name: assetProfileInImport?.name ?? symbol }; @@ -301,23 +306,16 @@ export class DataProviderService implements OnModuleInit { let assetProfile: Partial = { currency }; try { - assetProfile = - ( - await this.getAssetProfiles([ - { - dataSource, - symbol - } - ]) - )?.[assetProfileIdentifier] ?? assetProfile; + assetProfile = ( + await this.getAssetProfiles([ + { + dataSource, + symbol + } + ]) + )?.[assetProfileIdentifier]; } catch {} - if (!assetProfile?.name && assetProfileInImport) { - // Omit the market data, since it must not become part of the - // asset profile of the response - Object.assign(assetProfile, omit(assetProfileInImport, 'marketData')); - } - if (!assetProfile?.name) { throw new Error( `${activityPath}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")`