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

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

@ -396,6 +396,39 @@ describe('ImportService', () => {
).toMatchObject({ symbol, dataSource: DataSource.MANUAL }); ).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 () => { it('keeps the asset profiles of the activities in a dry run', async () => {
const activities = await importActivities({ const activities = await importActivities({
activitiesDto: [ 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 symbol = isSymbolOfAssetProfileToCreate
? assetProfileSymbolMapping[symbol] ? assetProfileSymbolMapping[symbol]

Loading…
Cancel
Save