添加即将到来比赛列表接口

This commit is contained in:
xianyi
2026-01-13 17:15:59 +08:00
parent 91cf23cd11
commit 7b8e0e7e32
3 changed files with 77 additions and 0 deletions

View File

@@ -8,5 +8,6 @@ export const API_ENDPOINTS = {
COUNTRIES: "/v1/api/countries",
LEAGUES: "/v1/api/leagues",
MATCHES_TODAY: "/v1/api/matches/today",
UPCOMING_MATCHES: "/v1/api/matches/upcoming",
MATCH_DETAIL: (id: string) => `/v1/api/matches/${id}`,
};

View File

@@ -7,6 +7,7 @@ import {
Match,
MatchDetailData,
Sport,
UpcomingMatch,
} from "@/types/api";
import axios from "axios";
@@ -108,3 +109,32 @@ export const fetchMatchDetail = async (
throw error;
}
};
export const fetchUpcomingMatches = async (
sportId: number,
leagueKey: string,
limit: number = 50
): Promise<UpcomingMatch[]> => {
try {
const response =
await apiClient.get<ApiResponse<ApiListResponse<UpcomingMatch>>>(
API_ENDPOINTS.UPCOMING_MATCHES,
{
params: {
sport_id: sportId,
leagueKey,
limit,
},
}
);
if (response.data.code === 0) {
return response.data.data.list;
}
throw new Error(response.data.message);
} catch (error) {
console.error("Fetch upcoming matches error:", error);
throw error;
}
};

View File

@@ -99,6 +99,52 @@ export interface Player {
position?: string; // 兜底位置字段
}
export interface UpcomingMatch {
id: number;
eventKey: string;
sportId: number;
leagueKey: string;
leagueName: string;
leagueLogo: string;
leagueGroup: string;
countryKey: string;
countryName: string;
countryLogo: string;
season: string;
round: string;
stageName: string;
eventDate: string;
eventTime: string;
status: string; // scheduled
venue: string;
referee: string;
homeTeamKey: string;
homeTeamName: string;
homeTeamLogo: string;
homeFormation: string;
homeScore: number;
homeHalfScore: number;
homeShots: number;
homeShotsOnTarget: number;
homePossession: number;
homeYellowCards: number;
homeRedCards: number;
awayTeamKey: string;
awayTeamName: string;
awayTeamLogo: string;
awayFormation: string;
awayScore: number;
awayHalfScore: number;
awayShots: number;
awayShotsOnTarget: number;
awayPossession: number;
awayYellowCards: number;
awayRedCards: number;
eventLive: boolean;
createdAt: string;
updatedAt: string;
}
export interface MatchDetailData {
events: any[];
match: {