77 lines
1.5 KiB
TypeScript
77 lines
1.5 KiB
TypeScript
import {
|
|
IsArray,
|
|
IsString,
|
|
IsOptional,
|
|
IsNotEmpty,
|
|
IsNumber,
|
|
IsEnum,
|
|
ArrayMaxSize,
|
|
Min,
|
|
Max,
|
|
} from "class-validator";
|
|
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
|
|
|
export enum CouponStrategyEnum {
|
|
SAFE = "SAFE",
|
|
BALANCED = "BALANCED",
|
|
AGGRESSIVE = "AGGRESSIVE",
|
|
VALUE = "VALUE",
|
|
MIRACLE = "MIRACLE",
|
|
}
|
|
|
|
export class AnalyzeMatchDto {
|
|
@ApiProperty({ description: "Match ID to analyze" })
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
matchId: string;
|
|
}
|
|
|
|
export class DailyBankoDto {
|
|
@ApiPropertyOptional({
|
|
description: "Optional match IDs — system fetches if empty",
|
|
example: ["match-1", "match-2"],
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
@ArrayMaxSize(50)
|
|
matchIds?: string[];
|
|
}
|
|
|
|
export class SuggestCouponDto {
|
|
@ApiPropertyOptional({
|
|
description: "Match IDs — system fetches if empty",
|
|
example: ["match-1", "match-2"],
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
@ArrayMaxSize(50)
|
|
matchIds?: string[];
|
|
|
|
@ApiPropertyOptional({
|
|
enum: CouponStrategyEnum,
|
|
default: CouponStrategyEnum.BALANCED,
|
|
})
|
|
@IsOptional()
|
|
@IsEnum(CouponStrategyEnum)
|
|
strategy?: CouponStrategyEnum;
|
|
|
|
@ApiPropertyOptional({ description: "Maximum matches in coupon", example: 5 })
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(1)
|
|
@Max(20)
|
|
maxMatches?: number;
|
|
|
|
@ApiPropertyOptional({
|
|
description: "Minimum confidence threshold (0-100)",
|
|
example: 60,
|
|
})
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
@Max(100)
|
|
minConfidence?: number;
|
|
}
|