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 { 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<Activity>[];
activities: Pick<Activity, 'assetProfile' | 'error'>[];
assetProfiles: AssetProfileToCreate[];
}) {
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 { 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<CreateOrderDto>[];
userCurrency: string;
userId: string;
}): Promise<Partial<Activity>[]> {
}): Promise<(Partial<Activity> & Pick<Activity, 'assetProfile'>)[]> {
const { activities: existingActivities } =
await this.activitiesService.getActivities({
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,
dataSource,
symbol,
...omit(assetProfileInImport ?? {}, [
'dataSource',
'marketData',
'symbol'
]),
name: assetProfileInImport?.name ?? symbol
};
@ -301,23 +306,16 @@ export class DataProviderService implements OnModuleInit {
let assetProfile: Partial<SymbolProfile> = { 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}")`

Loading…
Cancel
Save