diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts index 9fd2a8b61..3cb1b97ed 100644 --- a/apps/api/src/app/activities/activities.service.ts +++ b/apps/api/src/app/activities/activities.service.ts @@ -109,6 +109,13 @@ export class ActivitiesService { tags, userId }: { tags: Tag[]; userId: string } & AssetProfileIdentifier) { + await this.tagService.validateTagIds( + tags.map(({ id }) => { + return id; + }), + userId + ); + const activities = await this.prismaService.order.findMany({ where: { userId, diff --git a/apps/api/src/services/tag/tag.service.ts b/apps/api/src/services/tag/tag.service.ts index 4f2b5c162..f2d7c718b 100644 --- a/apps/api/src/services/tag/tag.service.ts +++ b/apps/api/src/services/tag/tag.service.ts @@ -131,6 +131,13 @@ export class TagService { return; } + if (!userId) { + throw new HttpException( + getReasonPhrase(StatusCodes.BAD_REQUEST), + StatusCodes.BAD_REQUEST + ); + } + const uniqueTagIds = Array.from(new Set(tagIds)); const tagsCount = await this.prismaService.tag.count({ diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts index 9236a12d8..36365b7be 100644 --- a/libs/common/src/lib/dtos/create-order.dto.ts +++ b/libs/common/src/lib/dtos/create-order.dto.ts @@ -4,6 +4,7 @@ import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { + ArrayUnique, IsArray, IsBoolean, IsEnum, @@ -62,8 +63,10 @@ export class CreateOrderDto { @IsString() symbol: string; + @ArrayUnique() @IsArray() @IsOptional() + @IsString({ each: true }) tags?: string[]; @IsEnum(Type) diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts index 7843f142c..991479bc8 100644 --- a/libs/common/src/lib/dtos/update-order.dto.ts +++ b/libs/common/src/lib/dtos/update-order.dto.ts @@ -4,6 +4,7 @@ import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { + ArrayUnique, IsArray, IsEnum, IsISO8601, @@ -63,8 +64,10 @@ export class UpdateOrderDto { @IsString() symbol: string; + @ArrayUnique() @IsArray() @IsOptional() + @IsString({ each: true }) tags?: string[]; @IsString()