Browse Source

Fix creation of custom asset profiles with ghostfolio prefix

pull/8070/head
Thomas Kaul 1 week ago
parent
commit
2cbbaed9a9
  1. 8
      apps/api/src/app/activities/activities.service.ts
  2. 33
      apps/api/src/app/import/import.service.spec.ts
  3. 4
      apps/api/src/app/import/import.service.ts

8
apps/api/src/app/activities/activities.service.ts

@ -37,8 +37,8 @@ import {
canUseCustomAssetProfileSymbol,
getAssetProfileIdentifier,
getStartOfUtcDateOfTomorrow,
isDraftActivity,
isValidCustomAssetProfileSymbol
hasGhostfolioPrefix,
isDraftActivity
} from '@ghostfolio/common/helper';
import {
ActivitiesResponse,
@ -226,9 +226,7 @@ export class ActivitiesService {
let name = data.SymbolProfile.connectOrCreate.create.name;
let symbol: string;
const existingAssetProfile = isValidCustomAssetProfileSymbol(
requestedSymbol
)
const existingAssetProfile = hasGhostfolioPrefix(requestedSymbol)
? await this.prismaService.symbolProfile.findUnique({
select: { id: true },
where: {

33
apps/api/src/app/import/import.service.spec.ts

@ -396,6 +396,39 @@ describe('ImportService', () => {
).toMatchObject({ symbol, dataSource: DataSource.MANUAL });
});
it('refers the next activities with a symbol with the prefix to the custom asset profile which createActivity() has created', async () => {
mockCreatedAssetProfiles([
{ dataSource: DataSource.MANUAL, symbol: CUSTOM_ASSET_PROFILE_SYMBOL },
{ dataSource: DataSource.MANUAL, symbol: CUSTOM_ASSET_PROFILE_SYMBOL }
]);
await importActivities({
activitiesDto: [
createActivityDto({
dataSource: DataSource.MANUAL,
date: '2024-01-01T00:00:00.000Z',
symbol: 'GF_COPX',
type: 'BUY'
}),
createActivityDto({
dataSource: DataSource.MANUAL,
date: '2024-01-02T00:00:00.000Z',
symbol: 'GF_COPX',
type: 'BUY'
})
]
});
expect(
createActivity.mock.calls.map(([activity]) => {
return activity.SymbolProfile.connectOrCreate.create;
})
).toMatchObject([
{ dataSource: DataSource.MANUAL, symbol: 'GF_COPX' },
{ dataSource: DataSource.MANUAL, symbol: CUSTOM_ASSET_PROFILE_SYMBOL }
]);
});
it('keeps the asset profiles of the activities in a dry run', async () => {
const activities = await importActivities({
activitiesDto: [

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

@ -660,7 +660,9 @@ export class ImportService {
}
);
assetProfile.name ??= symbol;
if (hasGhostfolioPrefix(symbol)) {
assetProfile.name ??= symbol;
}
symbol = isSymbolOfAssetProfileToCreate
? assetProfileSymbolMapping[symbol]

Loading…
Cancel
Save