From 3e3c61da11c29a16d0c5012c1077b302f8a4ba59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Mart=C3=ADn?= Date: Sun, 2 Nov 2025 19:56:16 +0100 Subject: [PATCH] feat: add AssetProfileIdentifierDto and update access DTOs to use it --- apps/api/src/app/access/access-filter.dto.ts | 23 ++++--------------- apps/api/src/app/access/create-access.dto.ts | 9 +++++++- apps/api/src/app/access/update-access.dto.ts | 9 +++++++- .../lib/dto/asset-profile-identifier.dto.ts | 10 ++++++++ libs/common/src/lib/dto/index.ts | 1 + 5 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 libs/common/src/lib/dto/asset-profile-identifier.dto.ts create mode 100644 libs/common/src/lib/dto/index.ts diff --git a/apps/api/src/app/access/access-filter.dto.ts b/apps/api/src/app/access/access-filter.dto.ts index 427627063..748763acb 100644 --- a/apps/api/src/app/access/access-filter.dto.ts +++ b/apps/api/src/app/access/access-filter.dto.ts @@ -1,20 +1,7 @@ -import { DataSource } from '@prisma/client'; -import { Type } from 'class-transformer'; -import { - IsArray, - IsEnum, - IsOptional, - IsString, - ValidateNested -} from 'class-validator'; - -class HoldingFilterDto { - @IsEnum(DataSource) - dataSource: DataSource; +import { AssetProfileIdentifierDto } from '@ghostfolio/common/dto'; - @IsString() - symbol: string; -} +import { Type } from 'class-transformer'; +import { IsArray, IsOptional, IsString, ValidateNested } from 'class-validator'; export class AccessFilterDto { @IsArray() @@ -29,9 +16,9 @@ export class AccessFilterDto { @IsArray() @IsOptional() - @Type(() => HoldingFilterDto) + @Type(() => AssetProfileIdentifierDto) @ValidateNested({ each: true }) - holdings?: HoldingFilterDto[]; + holdings?: AssetProfileIdentifierDto[]; @IsArray() @IsOptional() diff --git a/apps/api/src/app/access/create-access.dto.ts b/apps/api/src/app/access/create-access.dto.ts index 29d92bb8b..ce625b89c 100644 --- a/apps/api/src/app/access/create-access.dto.ts +++ b/apps/api/src/app/access/create-access.dto.ts @@ -1,7 +1,13 @@ import { AccessFilter } from '@ghostfolio/common/interfaces'; import { AccessPermission } from '@prisma/client'; -import { IsEnum, IsOptional, IsString, IsUUID } from 'class-validator'; +import { + IsEnum, + IsObject, + IsOptional, + IsString, + IsUUID +} from 'class-validator'; export class CreateAccessDto { @IsOptional() @@ -9,6 +15,7 @@ export class CreateAccessDto { alias?: string; @IsOptional() + @IsObject() filter?: AccessFilter; @IsOptional() diff --git a/apps/api/src/app/access/update-access.dto.ts b/apps/api/src/app/access/update-access.dto.ts index f7c163b0d..9ca7d3cbd 100644 --- a/apps/api/src/app/access/update-access.dto.ts +++ b/apps/api/src/app/access/update-access.dto.ts @@ -1,7 +1,13 @@ import { AccessFilter } from '@ghostfolio/common/interfaces'; import { AccessPermission } from '@prisma/client'; -import { IsEnum, IsOptional, IsString, IsUUID } from 'class-validator'; +import { + IsEnum, + IsObject, + IsOptional, + IsString, + IsUUID +} from 'class-validator'; export class UpdateAccessDto { @IsOptional() @@ -9,6 +15,7 @@ export class UpdateAccessDto { alias?: string; @IsOptional() + @IsObject() filter?: AccessFilter; @IsOptional() diff --git a/libs/common/src/lib/dto/asset-profile-identifier.dto.ts b/libs/common/src/lib/dto/asset-profile-identifier.dto.ts new file mode 100644 index 000000000..cef718bf3 --- /dev/null +++ b/libs/common/src/lib/dto/asset-profile-identifier.dto.ts @@ -0,0 +1,10 @@ +import { DataSource } from '@prisma/client'; +import { IsEnum, IsString } from 'class-validator'; + +export class AssetProfileIdentifierDto { + @IsEnum(DataSource) + dataSource: DataSource; + + @IsString() + symbol: string; +} diff --git a/libs/common/src/lib/dto/index.ts b/libs/common/src/lib/dto/index.ts new file mode 100644 index 000000000..16465bcde --- /dev/null +++ b/libs/common/src/lib/dto/index.ts @@ -0,0 +1 @@ +export * from './asset-profile-identifier.dto';