From 3577d3dddd900500c7849f339e8a1466b4f27ad4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 22 Aug 2026 08:54:07 +0200 Subject: [PATCH] Fix unused custom asset profiles created by activities import --- apps/api/src/app/import/import.helper.ts | 34 ----------------------- apps/api/src/app/import/import.service.ts | 27 ++++++++++++++++-- 2 files changed, 25 insertions(+), 36 deletions(-) delete mode 100644 apps/api/src/app/import/import.helper.ts diff --git a/apps/api/src/app/import/import.helper.ts b/apps/api/src/app/import/import.helper.ts deleted file mode 100644 index 85c531341..000000000 --- a/apps/api/src/app/import/import.helper.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; -import { Activity } from '@ghostfolio/common/interfaces'; - -import { AssetProfileToCreate } from './interfaces/asset-profile-to-create.interface'; - -/** - * Returns the asset profiles which at least one activity of the import uses. - * The asset profiles are created after the validation of the activities, - * thus an asset profile of an activity which is not imported must not be - * created. - */ -export function getAssetProfilesToCreate({ - activities, - assetProfiles -}: { - activities: Pick[]; - assetProfiles: AssetProfileToCreate[]; -}) { - const assetProfileIdentifiersToImport = new Set( - activities - .filter(({ error }) => { - return !error; - }) - .map(({ assetProfile }) => { - return getAssetProfileIdentifier(assetProfile); - }) - ); - - return assetProfiles.filter(({ assetProfile }) => { - return assetProfileIdentifiersToImport.has( - getAssetProfileIdentifier(assetProfile) - ); - }); -} diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 5866be0e9..96a8f9333 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -48,7 +48,6 @@ import { omit, uniqBy } from 'lodash'; import { randomUUID } from 'node:crypto'; import { ImportDataDto } from './import-data.dto'; -import { getAssetProfilesToCreate } from './import.helper'; import { AssetProfileToCreate } from './interfaces/asset-profile-to-create.interface'; @Injectable() @@ -741,7 +740,7 @@ export class ImportService { for (const { assetProfile, marketDataObjects - } of getAssetProfilesToCreate({ + } of this.getAssetProfilesToCreate({ activities: activitiesExtendedWithErrors, assetProfiles: assetProfilesToCreate })) { @@ -1087,6 +1086,30 @@ export class ImportService { return matchingAccountsOfUser[0]; } + private getAssetProfilesToCreate({ + activities, + assetProfiles + }: { + activities: Pick[]; + assetProfiles: AssetProfileToCreate[]; + }) { + const assetProfileIdentifiersToImport = new Set( + activities + .filter(({ error }) => { + return !error; + }) + .map(({ assetProfile }) => { + return getAssetProfileIdentifier(assetProfile); + }) + ); + + return assetProfiles.filter(({ assetProfile }) => { + return assetProfileIdentifiersToImport.has( + getAssetProfileIdentifier(assetProfile) + ); + }); + } + private isUniqueAccount(accounts: AccountWithValue[]) { const uniqueAccountIds = new Set();