gg
Deploy Iddaai Frontend / build-and-deploy (push) Successful in 2m24s

This commit is contained in:
2026-05-17 02:19:55 +03:00
parent 66877b88ca
commit e744a62fc2
10 changed files with 856 additions and 183 deletions
Vendored
BIN
View File
Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "frontend",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 6195
}
]
}
+20 -1
View File
@@ -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
View File
@@ -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",
+1 -1
View File
@@ -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">
+49 -2
View File
@@ -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 {
+1 -1
View File
@@ -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",
});
+1 -1
View File
File diff suppressed because one or more lines are too long