From edd6ced2a3aa983849adf7f311fb3805b77752f3 Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 18 Jan 2026 05:47:03 -0800 Subject: [PATCH] =?UTF-8?q?fix(trading):=20=E4=B8=BA=E5=81=9A=E5=B8=82?= =?UTF-8?q?=E5=95=86=20DTO=20=E6=B7=BB=E5=8A=A0=20class-validator=20?= =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复做市商初始化失败问题。由于 ValidationPipe 配置了 forbidNonWhitelisted: true,没有装饰器的属性会被拒绝。 Co-Authored-By: Claude Opus 4.5 --- .../controllers/market-maker.controller.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/backend/services/trading-service/src/api/controllers/market-maker.controller.ts b/backend/services/trading-service/src/api/controllers/market-maker.controller.ts index 54948e1d..42682da6 100644 --- a/backend/services/trading-service/src/api/controllers/market-maker.controller.ts +++ b/backend/services/trading-service/src/api/controllers/market-maker.controller.ts @@ -9,48 +9,117 @@ import { HttpStatus, } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse, ApiQuery } from '@nestjs/swagger'; +import { IsString, IsOptional, IsNumber } from 'class-validator'; import { MarketMakerService, LedgerType, AssetType } from '../../application/services/market-maker.service'; import { Public } from '../../shared/guards/jwt-auth.guard'; // DTO 定义 class InitializeMarketMakerDto { + @IsOptional() + @IsString() name?: string; + + @IsString() accountSequence: string; + + @IsOptional() + @IsString() initialCash?: string; + + @IsOptional() + @IsNumber() maxBuyRatio?: number; + + @IsOptional() + @IsNumber() minIntervalMs?: number; + + @IsOptional() + @IsNumber() maxIntervalMs?: number; } class DepositDto { + @IsString() amount: string; + + @IsOptional() + @IsString() memo?: string; } class WithdrawDto { + @IsString() amount: string; + + @IsOptional() + @IsString() memo?: string; } class UpdateConfigDto { + @IsOptional() + @IsNumber() maxBuyRatio?: number; + + @IsOptional() + @IsNumber() minIntervalMs?: number; + + @IsOptional() + @IsNumber() maxIntervalMs?: number; + + @IsOptional() + @IsString() priceStrategy?: string; + + @IsOptional() + @IsNumber() discountRate?: number; } class UpdateMakerConfigDto { + @IsOptional() bidEnabled?: boolean; + + @IsOptional() + @IsNumber() bidLevels?: number; + + @IsOptional() + @IsNumber() bidSpread?: number; + + @IsOptional() + @IsNumber() bidLevelSpacing?: number; + + @IsOptional() + @IsString() bidQuantityPerLevel?: string; + + @IsOptional() askEnabled?: boolean; + + @IsOptional() + @IsNumber() askLevels?: number; + + @IsOptional() + @IsNumber() askSpread?: number; + + @IsOptional() + @IsNumber() askLevelSpacing?: number; + + @IsOptional() + @IsString() askQuantityPerLevel?: string; + + @IsOptional() + @IsNumber() refreshIntervalMs?: number; }