Browse Source

Fix unused custom asset profiles created by activities import

pull/7673/head
Thomas Kaul 1 week ago
parent
commit
db6796d4b7
  1. 4
      apps/api/src/app/import/import.helper.ts
  2. 4
      apps/api/src/app/import/import.service.ts
  3. 0
      apps/api/src/app/import/interfaces/asset-profile-to-create.interface.ts
  4. 28
      apps/api/src/services/data-provider/data-provider.service.ts

4
apps/api/src/app/import/import.helper.ts

@ -1,7 +1,7 @@
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Activity } from '@ghostfolio/common/interfaces'; 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. * Returns the asset profiles which at least one activity of the import uses.
@ -13,7 +13,7 @@ export function getAssetProfilesToCreate({
activities, activities,
assetProfiles assetProfiles
}: { }: {
activities: Partial<Activity>[]; activities: Pick<Activity, 'assetProfile' | 'error'>[];
assetProfiles: AssetProfileToCreate[]; assetProfiles: AssetProfileToCreate[];
}) { }) {
const assetProfileIdentifiersToImport = new Set( const assetProfileIdentifiersToImport = new Set(

4
apps/api/src/app/import/import.service.ts

@ -49,7 +49,7 @@ import { randomUUID } from 'node:crypto';
import { ImportDataDto } from './import-data.dto'; import { ImportDataDto } from './import-data.dto';
import { getAssetProfilesToCreate } from './import.helper'; import { getAssetProfilesToCreate } from './import.helper';
import { AssetProfileToCreate } from './interfaces/interfaces'; import { AssetProfileToCreate } from './interfaces/asset-profile-to-create.interface';
@Injectable() @Injectable()
export class ImportService { export class ImportService {
@ -966,7 +966,7 @@ export class ImportService {
activitiesDto: Partial<CreateOrderDto>[]; activitiesDto: Partial<CreateOrderDto>[];
userCurrency: string; userCurrency: string;
userId: string; userId: string;
}): Promise<Partial<Activity>[]> { }): Promise<(Partial<Activity> & Pick<Activity, 'assetProfile'>)[]> {
const { activities: existingActivities } = const { activities: existingActivities } =
await this.activitiesService.getActivities({ await this.activitiesService.getActivities({
userCurrency, userCurrency,

0
apps/api/src/app/import/interfaces/interfaces.ts → apps/api/src/app/import/interfaces/asset-profile-to-create.interface.ts

28
apps/api/src/services/data-provider/data-provider.service.ts

@ -292,6 +292,11 @@ export class DataProviderService implements OnModuleInit {
currency, currency,
dataSource, dataSource,
symbol, symbol,
...omit(assetProfileInImport ?? {}, [
'dataSource',
'marketData',
'symbol'
]),
name: assetProfileInImport?.name ?? symbol name: assetProfileInImport?.name ?? symbol
}; };
@ -301,23 +306,16 @@ export class DataProviderService implements OnModuleInit {
let assetProfile: Partial<SymbolProfile> = { currency }; let assetProfile: Partial<SymbolProfile> = { currency };
try { try {
assetProfile = assetProfile = (
( await this.getAssetProfiles([
await this.getAssetProfiles([ {
{ dataSource,
dataSource, symbol
symbol }
} ])
]) )?.[assetProfileIdentifier];
)?.[assetProfileIdentifier] ?? assetProfile;
} catch {} } 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) { if (!assetProfile?.name) {
throw new Error( throw new Error(
`${activityPath}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")` `${activityPath}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")`

Loading…
Cancel
Save