diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a8bb7a3d..d955c21a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Hardened the validation of the countries in the asset profile endpoints +- Hardened the validation of the holdings in the asset profile endpoints - Hardened the validation of the scraper configuration in the asset profile endpoint - Hardened the validation of the sectors in the asset profile endpoints - Rounded the value of the _Fear & Greed Index_ (market mood) in the twitter bot service diff --git a/libs/common/src/lib/dtos/create-asset-profile.dto.ts b/libs/common/src/lib/dtos/create-asset-profile.dto.ts index 0b0ccb9d3..17a9d12b9 100644 --- a/libs/common/src/lib/dtos/create-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/create-asset-profile.dto.ts @@ -13,6 +13,7 @@ import { } from 'class-validator'; import { CountryDto } from './country.dto'; +import { HoldingDto } from './holding.dto'; import { SectorDto } from './sector.dto'; export class CreateAssetProfileDto { @@ -58,6 +59,8 @@ export class CreateAssetProfileDto { @IsArray() @IsOptional() + @Type(() => HoldingDto) + @ValidateNested({ each: true }) holdings?: Prisma.InputJsonArray; @IsBoolean() diff --git a/libs/common/src/lib/dtos/holding.dto.ts b/libs/common/src/lib/dtos/holding.dto.ts new file mode 100644 index 000000000..8c093e3bc --- /dev/null +++ b/libs/common/src/lib/dtos/holding.dto.ts @@ -0,0 +1,11 @@ +import { IsNumber, IsString, Max, Min } from 'class-validator'; + +export class HoldingDto { + @IsNumber() + @Max(1) + @Min(0) + allocationInPercentage: number; + + @IsString() + name: string; +} diff --git a/libs/common/src/lib/dtos/index.ts b/libs/common/src/lib/dtos/index.ts index ae7ae9221..785115356 100644 --- a/libs/common/src/lib/dtos/index.ts +++ b/libs/common/src/lib/dtos/index.ts @@ -11,6 +11,7 @@ import { CreatePlatformDto } from './create-platform.dto'; import { CreateTagDto } from './create-tag.dto'; import { CreateWatchlistItemDto } from './create-watchlist-item.dto'; import { DeleteOwnUserDto } from './delete-own-user.dto'; +import { HoldingDto } from './holding.dto'; import { ScraperConfigurationDto } from './scraper-configuration.dto'; import { SectorDto } from './sector.dto'; import { TransferBalanceDto } from './transfer-balance.dto'; @@ -41,6 +42,7 @@ export { CreateTagDto, CreateWatchlistItemDto, DeleteOwnUserDto, + HoldingDto, ScraperConfigurationDto, SectorDto, TransferBalanceDto, diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts index faa0cecfc..a6e2230e8 100644 --- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts @@ -20,6 +20,7 @@ import { } from 'class-validator'; import { CountryDto } from './country.dto'; +import { HoldingDto } from './holding.dto'; import { ScraperConfigurationDto } from './scraper-configuration.dto'; import { SectorDto } from './sector.dto'; @@ -56,6 +57,8 @@ export class UpdateAssetProfileDto { @IsArray() @IsOptional() + @Type(() => HoldingDto) + @ValidateNested({ each: true }) holdings?: Prisma.InputJsonArray; @IsBoolean()