From 9c78bc29a476719f5bd516234bf0c28c17b21a73 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 6 Aug 2026 07:41:19 +0200 Subject: [PATCH] Task/extract non-investment activity types constant (#7535) Extract non-investment activity type --- apps/api/src/app/activities/activities.service.ts | 7 ++++--- apps/api/src/app/import/import.service.ts | 3 ++- .../src/services/data-provider/data-provider.service.ts | 3 ++- apps/client/src/app/services/import-activities.service.ts | 3 ++- libs/common/src/lib/config.ts | 6 ++++++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts index ef3839340..140726aeb 100644 --- a/apps/api/src/app/activities/activities.service.ts +++ b/apps/api/src/app/activities/activities.service.ts @@ -20,6 +20,7 @@ import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, GATHER_ASSET_PROFILE_PROCESS_JOB_NAME, GATHER_ASSET_PROFILE_PROCESS_JOB_OPTIONS, + NON_INVESTMENT_ACTIVITY_TYPES, TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; import { @@ -191,7 +192,7 @@ export class ActivitiesService { const userId = data.userId; if ( - ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type) || + NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type) || (data.SymbolProfile.connectOrCreate.create.dataSource === 'MANUAL' && data.type === 'BUY') ) { @@ -260,7 +261,7 @@ export class ActivitiesService { const orderData: Prisma.OrderCreateInput = data; - const isDraft = ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type) + const isDraft = NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type) ? false : isAfter(data.date as Date, endOfToday()); @@ -981,7 +982,7 @@ export class ActivitiesService { let isDraft = false; if ( - ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type) || + NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type) || (data.SymbolProfile.connect.dataSource_symbol.dataSource === 'MANUAL' && data.type === 'BUY') ) { diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index be511df44..96612522e 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -12,6 +12,7 @@ import { TagService } from '@ghostfolio/api/services/tag/tag.service'; import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, ghostfolioPrefix, + NON_INVESTMENT_ACTIVITY_TYPES, TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; import { CreateAssetProfileDto, CreateOrderDto } from '@ghostfolio/common/dtos'; @@ -217,7 +218,7 @@ export class ImportService { // createActivity() if needed. for (const [index, activity] of activitiesDto.entries()) { if (!activity.dataSource) { - if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) { + if (NON_INVESTMENT_ACTIVITY_TYPES.includes(activity.type)) { activity.dataSource = DataSource.MANUAL; } else { activity.dataSource = 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 6031a8e25..c5de3e4e5 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -9,6 +9,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { DEFAULT_CURRENCY, DERIVED_CURRENCIES, + NON_INVESTMENT_ACTIVITY_TYPES, PROPERTY_API_KEY_GHOSTFOLIO, PROPERTY_DATA_SOURCE_MAPPING } from '@ghostfolio/common/config'; @@ -268,7 +269,7 @@ export class DataProviderService implements OnModuleInit { if (!assetProfiles[assetProfileIdentifier]) { if ( (dataSource === DataSource.MANUAL && type === 'BUY') || - ['FEE', 'INTEREST', 'LIABILITY'].includes(type) + NON_INVESTMENT_ACTIVITY_TYPES.includes(type) ) { const assetProfileInImport = assetProfilesWithMarketDataDto?.find( (assetProfile) => { diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 503149a03..b73676252 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -1,3 +1,4 @@ +import { NON_INVESTMENT_ACTIVITY_TYPES } from '@ghostfolio/common/config'; import { CreateAccountWithBalancesDto, CreateAssetProfileWithMarketDataDto, @@ -70,7 +71,7 @@ export class ImportActivitiesService { let dataSource = this.parseDataSource({ item }); let symbol = this.parseSymbol({ content, index, item }); - if (!dataSource && ['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { + if (!dataSource && NON_INVESTMENT_ACTIVITY_TYPES.includes(type)) { // Apply the same data source as the import service dataSource = DataSource.MANUAL; } diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index cbd77740a..08a6701dc 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -231,6 +231,12 @@ export const INVESTMENT_ACTIVITY_TYPES = [ Type.SELL ] as Type[]; +export const NON_INVESTMENT_ACTIVITY_TYPES = Object.values(Type).filter( + (type) => { + return !INVESTMENT_ACTIVITY_TYPES.includes(type); + } +); + export const PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME = 'PORTFOLIO'; export const PORTFOLIO_SNAPSHOT_PROCESS_JOB_OPTIONS: JobOptions = { removeOnComplete: true