diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index f0f52bfe2..6f8c62012 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -6,7 +6,7 @@ import { Filter, Export } from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { Platform, Prisma } from '@prisma/client'; -import { groupBy } from 'lodash'; +import { groupBy, uniqBy } from 'lodash'; @Injectable() export class ExportService { @@ -108,6 +108,15 @@ export class ExportService { } ); + const assetProfiles = uniqBy( + activities.map(({ SymbolProfile }) => { + return SymbolProfile; + }), + ({ id }) => { + return id; + } + ); + const tags = (await this.tagService.getTagsForUser(userId)) .filter( ({ id, isUsed }) => @@ -128,6 +137,54 @@ export class ExportService { return { meta: { date: new Date().toISOString(), version: environment.version }, accounts, + assetProfiles: assetProfiles.map( + ({ + assetClass, + assetSubClass, + comment, + countries, + currency, + cusip, + dataSource, + figi, + figiComposite, + figiShareClass, + holdings, + id, + isActive, + isin, + name, + scraperConfiguration, + sectors, + symbol, + symbolMapping, + url + }) => { + return { + assetClass, + assetSubClass, + comment, + countries: countries as unknown as Prisma.JsonArray, + currency, + cusip, + dataSource, + figi, + figiComposite, + figiShareClass, + holdings: holdings as unknown as Prisma.JsonArray, + id, + isActive, + isin, + name, + scraperConfiguration: + scraperConfiguration as unknown as Prisma.JsonArray, + sectors: sectors as unknown as Prisma.JsonArray, + symbol, + symbolMapping, + url + }; + } + ), platforms: Object.values(platformsMap), tags, activities: activities.map( @@ -145,6 +202,7 @@ export class ExportService { unitPrice }) => { return { + assetProfileId: SymbolProfile.userId ? SymbolProfile.id : undefined, accountId, comment, fee, diff --git a/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts b/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts index b810728d6..4cc6ba8aa 100644 --- a/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts +++ b/libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts @@ -14,6 +14,7 @@ export interface EnhancedSymbolProfile { countries: Country[]; createdAt: Date; currency?: string; + cusip?: string; dataProviderInfo?: DataProviderInfo; dataSource: DataSource; dateOfFirstActivity?: Date; diff --git a/libs/common/src/lib/interfaces/export.interface.ts b/libs/common/src/lib/interfaces/export.interface.ts index 24e478779..41c66b694 100644 --- a/libs/common/src/lib/interfaces/export.interface.ts +++ b/libs/common/src/lib/interfaces/export.interface.ts @@ -1,4 +1,4 @@ -import { Account, Order, Platform, Tag } from '@prisma/client'; +import { Account, Order, Platform, SymbolProfile, Tag } from '@prisma/client'; import { AccountBalance } from './account-balance.interface'; @@ -15,7 +15,8 @@ export interface Export { | 'symbolProfileId' | 'updatedAt' | 'userId' - > & { date: string; symbol: string })[]; + > & { assetProfileId?: string; date: string; symbol: string })[]; + assetProfiles: Omit[]; meta: { date: string; version: string;