Browse Source

Restrict data source in CreateAssetProfileWithMarketDataDto

pull/5243/head
Thomas Kaul 4 weeks ago
parent
commit
45c5c78b64
  1. 8
      apps/api/src/app/import/create-asset-profile-with-market-data.dto.ts
  2. 2
      apps/api/src/app/import/import-data.dto.ts
  3. 16
      apps/api/src/app/import/import.service.ts
  4. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  5. 2
      apps/client/src/app/services/import-activities.service.ts

8
apps/api/src/app/import/create-asset-profile-with-maketdata.dto.ts → apps/api/src/app/import/create-asset-profile-with-market-data.dto.ts

@ -1,10 +1,16 @@
import { MarketData } from '@ghostfolio/common/interfaces'; import { MarketData } from '@ghostfolio/common/interfaces';
import { IsArray, IsOptional } from 'class-validator'; import { DataSource } from '@prisma/client';
import { IsArray, IsEnum, IsOptional } from 'class-validator';
import { CreateAssetProfileDto } from '../admin/create-asset-profile.dto'; import { CreateAssetProfileDto } from '../admin/create-asset-profile.dto';
export class CreateAssetProfileWithMarketDataDto extends CreateAssetProfileDto { export class CreateAssetProfileWithMarketDataDto extends CreateAssetProfileDto {
@IsEnum([DataSource.MANUAL], {
message: `dataSource must be '${DataSource.MANUAL}'`
})
dataSource: DataSource;
@IsArray() @IsArray()
@IsOptional() @IsOptional()
marketData?: MarketData[]; marketData?: MarketData[];

2
apps/api/src/app/import/import-data.dto.ts

@ -4,7 +4,7 @@ import { Type } from 'class-transformer';
import { IsArray, IsOptional, ValidateNested } from 'class-validator'; import { IsArray, IsOptional, ValidateNested } from 'class-validator';
import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto'; import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto';
import { CreateAssetProfileWithMarketDataDto } from './create-asset-profile-with-maketdata.dto'; import { CreateAssetProfileWithMarketDataDto } from './create-asset-profile-with-market-data.dto';
export class ImportDataDto { export class ImportDataDto {
@IsArray() @IsArray()

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

@ -237,14 +237,6 @@ export class ImportService {
} }
if (!isDryRun && assetProfilesWithMarketDataDto?.length) { if (!isDryRun && assetProfilesWithMarketDataDto?.length) {
// Filter out not custom asset profiles
assetProfilesWithMarketDataDto = assetProfilesWithMarketDataDto.filter(
({ dataSource }) => {
return dataSource === DataSource.MANUAL;
}
);
if (assetProfilesWithMarketDataDto.length) {
const existingAssetProfiles = const existingAssetProfiles =
await this.symbolProfileService.getSymbolProfiles( await this.symbolProfileService.getSymbolProfiles(
assetProfilesWithMarketDataDto.map(({ dataSource, symbol }) => { assetProfilesWithMarketDataDto.map(({ dataSource, symbol }) => {
@ -264,10 +256,7 @@ export class ImportService {
); );
// If there is no asset profile or if the asset profile belongs to a different user, then create a new asset profile // If there is no asset profile or if the asset profile belongs to a different user, then create a new asset profile
if ( if (!existingAssetProfile || existingAssetProfile.userId !== user.id) {
!existingAssetProfile ||
existingAssetProfile.userId !== user.id
) {
const assetProfile: CreateAssetProfileDto = omit( const assetProfile: CreateAssetProfileDto = omit(
assetProfileWithMarketData, assetProfileWithMarketData,
'marketData' 'marketData'
@ -275,7 +264,7 @@ export class ImportService {
// Asset profile belongs to a different user // Asset profile belongs to a different user
if (existingAssetProfile) { if (existingAssetProfile) {
const symbol = uuidv4(); // Generate a new symbol for the asset profile const symbol = uuidv4();
assetProfileSymbolMapping[assetProfile.symbol] = symbol; assetProfileSymbolMapping[assetProfile.symbol] = symbol;
assetProfile.symbol = symbol; assetProfile.symbol = symbol;
} }
@ -303,7 +292,6 @@ export class ImportService {
await this.marketDataService.updateMany({ data: marketDataObjects }); await this.marketDataService.updateMany({ data: marketDataObjects });
} }
} }
}
for (const activity of activitiesDto) { for (const activity of activitiesDto) {
if (!activity.dataSource) { if (!activity.dataSource) {

2
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts

@ -1,5 +1,5 @@
import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto';
import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-maketdata.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';

2
apps/client/src/app/services/import-activities.service.ts

@ -1,5 +1,5 @@
import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto';
import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-maketdata.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { parseDate as parseDateHelper } from '@ghostfolio/common/helper'; import { parseDate as parseDateHelper } from '@ghostfolio/common/helper';

Loading…
Cancel
Save