This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.0.1",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "frontend",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": ["run", "dev"],
|
||||
"port": 6195
|
||||
}
|
||||
]
|
||||
}
|
||||
+20
-1
@@ -137,7 +137,25 @@
|
||||
"substitutes": "Substitutes",
|
||||
"all-matches": "All Matches",
|
||||
"today-matches": "Today's Matches",
|
||||
"next-1-hour": "Next 1 Hour"
|
||||
"next-1-hour": "Next 1 Hour",
|
||||
"possession": "Possession",
|
||||
"shots-on-target": "Shots on Target",
|
||||
"shots-off-target": "Shots off Target",
|
||||
"total-shots": "Total Shots",
|
||||
"total-passes": "Total Passes",
|
||||
"corners": "Corners",
|
||||
"fouls": "Fouls",
|
||||
"offsides": "Offsides",
|
||||
"officials": "Officials",
|
||||
"main-referee": "Referee",
|
||||
"assistant-referee": "Assistant Referee",
|
||||
"fourth-official": "Fourth Official",
|
||||
"var-referee": "VAR Referee",
|
||||
"avar-referee": "AVAR Referee",
|
||||
"penalty": "Penalty",
|
||||
"half-time": "1st Half",
|
||||
"second-half": "2nd Half",
|
||||
"assist": "Assist"
|
||||
},
|
||||
"predictions": {
|
||||
"title": "Predictions",
|
||||
@@ -161,6 +179,7 @@
|
||||
"expected-value": "Expected Value",
|
||||
"no-predictions": "No predictions available.",
|
||||
"generate": "Analyze with AI",
|
||||
"pre-match-disclaimer": "This analysis is based on pre-match data only.",
|
||||
"accuracy": "Accuracy",
|
||||
"total-predictions": "Total Predictions",
|
||||
"correct-predictions": "Correct Predictions",
|
||||
|
||||
+20
-1
@@ -137,7 +137,25 @@
|
||||
"substitutes": "Yedekler",
|
||||
"all-matches": "Tüm Maçlar",
|
||||
"today-matches": "Bugünün Maçları",
|
||||
"next-1-hour": "1 Saat İçinde"
|
||||
"next-1-hour": "1 Saat İçinde",
|
||||
"possession": "Topa Sahip Olma",
|
||||
"shots-on-target": "İsabetli Şut",
|
||||
"shots-off-target": "İsabetsiz Şut",
|
||||
"total-shots": "Toplam Şut",
|
||||
"total-passes": "Toplam Pas",
|
||||
"corners": "Korner",
|
||||
"fouls": "Faul",
|
||||
"offsides": "Ofsayt",
|
||||
"officials": "Hakemler",
|
||||
"main-referee": "Hakem",
|
||||
"assistant-referee": "Yardımcı Hakem",
|
||||
"fourth-official": "Dördüncü Hakem",
|
||||
"var-referee": "VAR Hakemi",
|
||||
"avar-referee": "AVAR Hakemi",
|
||||
"penalty": "Penaltı",
|
||||
"half-time": "İlk Yarı",
|
||||
"second-half": "İkinci Yarı",
|
||||
"assist": "Asist"
|
||||
},
|
||||
"predictions": {
|
||||
"title": "Tahminler",
|
||||
@@ -161,6 +179,7 @@
|
||||
"expected-value": "Beklenen Değer",
|
||||
"no-predictions": "Tahmin bulunmuyor.",
|
||||
"generate": "Yapay Zeka ile Analiz Et",
|
||||
"pre-match-disclaimer": "Bu analiz maç başlamadan önceki verilere dayanmaktadır.",
|
||||
"accuracy": "Doğruluk",
|
||||
"total-predictions": "Toplam Tahmin",
|
||||
"correct-predictions": "Doğru Tahmin",
|
||||
|
||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
import "./.next/dev/types/routes.d.ts";
|
||||
import "./.next/types/routes.d.ts";
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1627,6 +1627,23 @@ export default function PredictionCard({ prediction }: PredictionCardProps) {
|
||||
)}
|
||||
ui={ui}
|
||||
/>
|
||||
{(prediction as unknown as Record<string, unknown>).ai_expert_commentary ? (
|
||||
<Card.Root bg={cardBg} borderColor={borderColor} borderRadius="2xl">
|
||||
<Card.Body gap={3}>
|
||||
<SectionTitle
|
||||
icon={LuBrain}
|
||||
title={uiText("ai-expert-commentary-title", "AI Uzman Yorumu")}
|
||||
info={uiText(
|
||||
"ai-expert-commentary-info",
|
||||
"Yapay zekanın maç verilerini okuyarak ürettiği uzman bahis analizi.",
|
||||
)}
|
||||
/>
|
||||
<Text fontSize="sm" color="fg.muted" lineHeight="1.7">
|
||||
{String((prediction as unknown as Record<string, unknown>).ai_expert_commentary)}
|
||||
</Text>
|
||||
</Card.Body>
|
||||
</Card.Root>
|
||||
) : null}
|
||||
{prediction.match_commentary?.headline ||
|
||||
prediction.match_commentary?.summary ? (
|
||||
<Card.Root bg={cardBg} borderColor={borderColor} borderRadius="2xl">
|
||||
|
||||
@@ -62,6 +62,9 @@ export interface MatchResponseDto {
|
||||
status: MatchStatus;
|
||||
state?: string;
|
||||
|
||||
homeTeamId?: string;
|
||||
awayTeamId?: string;
|
||||
|
||||
// Scores
|
||||
scoreHome?: number;
|
||||
scoreAway?: number;
|
||||
@@ -118,11 +121,55 @@ export interface MatchResponseDto {
|
||||
// Match detail enrichments
|
||||
refereeName?: string;
|
||||
sidelined?: Record<string, unknown>;
|
||||
events?: Array<Record<string, unknown>>;
|
||||
events?: MatchEvent[];
|
||||
playerEvents?: MatchEvent[];
|
||||
|
||||
// Additional fields from backend detail endpoint
|
||||
lineupSource?: string;
|
||||
stats?: Record<string, unknown>;
|
||||
stats?: {
|
||||
home?: TeamStats;
|
||||
away?: TeamStats;
|
||||
};
|
||||
footballTeamStats?: TeamStats[];
|
||||
officials?: MatchOfficial[];
|
||||
winner?: string;
|
||||
}
|
||||
|
||||
export interface MatchEvent {
|
||||
id: number;
|
||||
playerId?: string;
|
||||
teamId?: string;
|
||||
eventType: "goal" | "card" | "substitute" | string;
|
||||
eventSubtype?: string | null;
|
||||
timeMinute: string;
|
||||
timeSeconds?: number | null;
|
||||
periodId?: number;
|
||||
assistPlayerId?: string | null;
|
||||
scoreAfter?: string | null;
|
||||
playerOutId?: string | null;
|
||||
position?: "home" | "away" | string;
|
||||
player?: { id: string; name: string };
|
||||
assistPlayer?: { id: string; name: string } | null;
|
||||
substitutedOut?: { id: string; name: string } | null;
|
||||
}
|
||||
|
||||
export interface TeamStats {
|
||||
id?: number;
|
||||
teamId?: string;
|
||||
possessionPercentage?: number | null;
|
||||
shotsOnTarget?: number | null;
|
||||
shotsOffTarget?: number | null;
|
||||
totalShots?: number | null;
|
||||
totalPasses?: number | null;
|
||||
corners?: number | null;
|
||||
fouls?: number | null;
|
||||
offsides?: number | null;
|
||||
}
|
||||
|
||||
export interface MatchOfficial {
|
||||
id: number;
|
||||
name: string;
|
||||
roleId: number;
|
||||
}
|
||||
|
||||
export interface ActiveLeagueDto {
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
|
||||
const getPrediction = (matchId: string) => {
|
||||
return apiRequest<ApiResponse<MatchPredictionDto>>({
|
||||
url: `/predictions/${matchId}`,
|
||||
url: `/predictions/${matchId}?nocache=true`,
|
||||
client: "core",
|
||||
method: "get",
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user