61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
/**
|
|
* Prediction Card DTO
|
|
*
|
|
* Typed data structure for rendering match prediction cards
|
|
* and generating social media captions.
|
|
*/
|
|
|
|
export interface TopPick {
|
|
/** Market name in Turkish, e.g. "Üst 2.5 Gol" */
|
|
market: string;
|
|
/** Market name in English, e.g. "Over 2.5" */
|
|
marketEn: string;
|
|
/** Pick label, e.g. "Üst" */
|
|
pick: string;
|
|
/** Confidence 0-100 */
|
|
confidence: number;
|
|
/** Odds value */
|
|
odds: number;
|
|
}
|
|
|
|
export interface PredictionCardDto {
|
|
// ─── Match Info ───
|
|
matchId: string;
|
|
homeTeam: string;
|
|
awayTeam: string;
|
|
homeLogo: string;
|
|
awayLogo: string;
|
|
leagueName: string;
|
|
leagueLogo?: string;
|
|
/** Formatted date, e.g. "01 Mar 2026 - 21:00" */
|
|
matchDate: string;
|
|
|
|
// ─── Score Predictions ───
|
|
/** HT score, e.g. "1-0" */
|
|
htScore: string;
|
|
/** FT score, e.g. "2-1" */
|
|
ftScore: string;
|
|
/** Overall confidence 0-100 */
|
|
scoreConfidence: number;
|
|
|
|
// ─── Top 3 Best Bets ───
|
|
topPicks: TopPick[];
|
|
|
|
// ─── Risk ───
|
|
riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME';
|
|
|
|
// ─── Raw prediction JSON (for Gemini caption) ───
|
|
rawPrediction?: Record<string, any>;
|
|
}
|
|
|
|
export interface SocialPostResult {
|
|
matchId: string;
|
|
imagePath: string;
|
|
caption: string;
|
|
twitterPostId?: string;
|
|
facebookPostId?: string;
|
|
instagramPostId?: string;
|
|
postedAt: Date;
|
|
errors?: string[];
|
|
}
|