This commit is contained in:
2026-04-16 17:21:48 +03:00
parent c8fa4c442d
commit c8e7e4e927
116 changed files with 3720 additions and 4197 deletions
+32 -37
View File
@@ -1,11 +1,6 @@
import { ApiProperty } from '@nestjs/swagger';
import { ApiProperty } from "@nestjs/swagger";
export type SignalTier =
| 'CORE'
| 'VALUE'
| 'LEAN'
| 'LONGSHOT'
| 'PASS';
export type SignalTier = "CORE" | "VALUE" | "LEAN" | "LONGSHOT" | "PASS";
export class MatchInfoDto {
@ApiProperty()
@@ -34,14 +29,14 @@ export class MatchInfoDto {
@ApiProperty({
required: false,
enum: ['football', 'basketball'],
enum: ["football", "basketball"],
})
sport?: 'football' | 'basketball';
sport?: "football" | "basketball";
}
export class DataQualityDto {
@ApiProperty({ enum: ['HIGH', 'MEDIUM', 'LOW'] })
label: 'HIGH' | 'MEDIUM' | 'LOW';
@ApiProperty({ enum: ["HIGH", "MEDIUM", "LOW"] })
label: "HIGH" | "MEDIUM" | "LOW";
@ApiProperty()
score: number;
@@ -52,7 +47,7 @@ export class DataQualityDto {
@ApiProperty()
away_lineup_count: number;
@ApiProperty({ required: false, default: 'none' })
@ApiProperty({ required: false, default: "none" })
lineup_source?: string;
@ApiProperty({ type: [String] })
@@ -69,16 +64,16 @@ export class ConfidenceIntervalDto {
@ApiProperty()
width: number;
@ApiProperty({ enum: ['HIGH', 'MEDIUM', 'LOW'] })
band: 'HIGH' | 'MEDIUM' | 'LOW';
@ApiProperty({ enum: ["HIGH", "MEDIUM", "LOW"] })
band: "HIGH" | "MEDIUM" | "LOW";
@ApiProperty()
threshold_met: boolean;
}
export class RiskDto {
@ApiProperty({ enum: ['LOW', 'MEDIUM', 'HIGH', 'EXTREME'] })
level: 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME';
@ApiProperty({ enum: ["LOW", "MEDIUM", "HIGH", "EXTREME"] })
level: "LOW" | "MEDIUM" | "HIGH" | "EXTREME";
@ApiProperty()
score: number;
@@ -156,8 +151,8 @@ export class MatchPickDto {
@ApiProperty()
playable: boolean;
@ApiProperty({ enum: ['A', 'B', 'C', 'PASS'] })
bet_grade: 'A' | 'B' | 'C' | 'PASS';
@ApiProperty({ enum: ["A", "B", "C", "PASS"] })
bet_grade: "A" | "B" | "C" | "PASS";
@ApiProperty()
stake_units: number;
@@ -170,7 +165,7 @@ export class MatchPickDto {
@ApiProperty({
required: false,
enum: ['CORE', 'VALUE', 'LEAN', 'LONGSHOT', 'PASS'],
enum: ["CORE", "VALUE", "LEAN", "LONGSHOT", "PASS"],
})
signal_tier?: SignalTier;
}
@@ -185,15 +180,15 @@ export class MatchBetAdviceDto {
@ApiProperty()
reason: string;
@ApiProperty({ required: false, enum: ['HIGH', 'MEDIUM', 'LOW'] })
confidence_band?: 'HIGH' | 'MEDIUM' | 'LOW';
@ApiProperty({ required: false, enum: ["HIGH", "MEDIUM", "LOW"] })
confidence_band?: "HIGH" | "MEDIUM" | "LOW";
@ApiProperty({ required: false })
min_confidence_for_play?: number;
@ApiProperty({
required: false,
enum: ['CORE', 'VALUE', 'LEAN', 'LONGSHOT', 'PASS'],
enum: ["CORE", "VALUE", "LEAN", "LONGSHOT", "PASS"],
})
signal_tier?: SignalTier;
}
@@ -211,8 +206,8 @@ export class MatchBetSummaryItemDto {
@ApiProperty()
calibrated_confidence: number;
@ApiProperty({ enum: ['A', 'B', 'C', 'PASS'] })
bet_grade: 'A' | 'B' | 'C' | 'PASS';
@ApiProperty({ enum: ["A", "B", "C", "PASS"] })
bet_grade: "A" | "B" | "C" | "PASS";
@ApiProperty()
playable: boolean;
@@ -240,30 +235,30 @@ export class MatchBetSummaryItemDto {
@ApiProperty({
required: false,
enum: ['CORE', 'VALUE', 'LEAN', 'LONGSHOT', 'PASS'],
enum: ["CORE", "VALUE", "LEAN", "LONGSHOT", "PASS"],
})
signal_tier?: SignalTier;
}
export class HtFtPredictionDto {
@ApiProperty()
'1/1': number;
"1/1": number;
@ApiProperty()
'1/X': number;
"1/X": number;
@ApiProperty()
'1/2': number;
"1/2": number;
@ApiProperty()
'X/1': number;
"X/1": number;
@ApiProperty()
'X/X': number;
"X/X": number;
@ApiProperty()
'X/2': number;
"X/2": number;
@ApiProperty()
'2/1': number;
"2/1": number;
@ApiProperty()
'2/X': number;
"2/X": number;
@ApiProperty()
'2/2': number;
"2/2": number;
@ApiProperty()
pick: string;
@ApiProperty()
@@ -310,8 +305,8 @@ export class AggressivePickDto {
@ApiProperty()
playable: boolean;
@ApiProperty({ enum: ['A', 'B', 'C', 'PASS'] })
bet_grade: 'A' | 'B' | 'C' | 'PASS';
@ApiProperty({ enum: ["A", "B", "C", "PASS"] })
bet_grade: "A" | "B" | "C" | "PASS";
@ApiProperty()
stake_units: number;
@@ -468,4 +463,4 @@ export class AIHealthDto {
predictionServiceReady: boolean;
}
export * from './smart-coupon.dto';
export * from "./smart-coupon.dto";
@@ -8,28 +8,28 @@ import {
ArrayMaxSize,
Min,
Max,
} from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
} from "class-validator";
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
export class GeneratePredictionDto {
@ApiProperty({ description: 'Match ID to generate prediction for' })
@ApiProperty({ description: "Match ID to generate prediction for" })
@IsString()
@IsNotEmpty()
matchId: string;
}
export enum CouponStrategy {
SAFE = 'SAFE',
BALANCED = 'BALANCED',
AGGRESSIVE = 'AGGRESSIVE',
VALUE = 'VALUE',
MIRACLE = 'MIRACLE',
SAFE = "SAFE",
BALANCED = "BALANCED",
AGGRESSIVE = "AGGRESSIVE",
VALUE = "VALUE",
MIRACLE = "MIRACLE",
}
export class SmartCouponRequestDto {
@ApiProperty({
description: 'List of match IDs for coupon',
example: ['match-1', 'match-2'],
description: "List of match IDs for coupon",
example: ["match-1", "match-2"],
})
@IsArray()
@IsString({ each: true })
@@ -44,7 +44,7 @@ export class SmartCouponRequestDto {
@IsEnum(CouponStrategy)
strategy?: CouponStrategy;
@ApiPropertyOptional({ description: 'Maximum matches in coupon', example: 5 })
@ApiPropertyOptional({ description: "Maximum matches in coupon", example: 5 })
@IsOptional()
@IsNumber()
@Min(1)
@@ -52,7 +52,7 @@ export class SmartCouponRequestDto {
maxMatches?: number;
@ApiPropertyOptional({
description: 'Minimum confidence threshold (0-100)',
description: "Minimum confidence threshold (0-100)",
example: 60,
})
@IsOptional()
@@ -3,14 +3,14 @@
*/
export type CouponStrategy =
| 'SAFE'
| 'BALANCED'
| 'AGGRESSIVE'
| 'VALUE'
| 'MIRACLE';
| "SAFE"
| "BALANCED"
| "AGGRESSIVE"
| "VALUE"
| "MIRACLE";
export type RiskLevel = 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME';
export type DataQualityLabel = 'HIGH' | 'MEDIUM' | 'LOW';
export type RiskLevel = "LOW" | "MEDIUM" | "HIGH" | "EXTREME";
export type DataQualityLabel = "HIGH" | "MEDIUM" | "LOW";
export interface SmartCouponRequestDto {
match_ids: string[];