Files
physical-expo/types/api.ts
2026-01-19 14:50:47 +08:00

528 lines
11 KiB
TypeScript

export interface Sport {
id: number;
name: string;
description: string;
icon: string;
isActive: boolean;
updatedAt: string;
createdAt: string;
}
export interface Match {
id: string;
league: string;
time: string;
date?: string;
home: string;
away: string;
scoreText: string;
fav: boolean;
sport?: string;
homeTeamName?: string;
homeTeamKey?: string;
homeTeamLogo?: string;
awayTeamName?: string;
awayTeamKey?: string;
awayTeamLogo?: string;
leagueName?: string;
leagueKey?: string;
leagueLogo?: string;
countryName?: string;
countryKey?: string;
countryLogo?: string;
events?: string;
players?: string;
sportId?: number;
leagueId?: number;
isLive?: boolean;
meta?: string;
}
export interface LiveScoreMatch {
event_key: number;
event_date: string;
event_time: string;
event_home_team: string;
home_team_key: number;
home_team_logo: string;
event_away_team: string;
away_team_key: number;
away_team_logo: string;
event_final_result: string;
event_halftime_result: string;
event_status: string;
event_live: string;
league_key: number;
league_name: string;
league_logo: string;
league_round: string;
league_season: string;
country_name: string;
country_logo: string;
event_country_key: number;
goalscorers?: {
time: string;
home_scorer: string;
home_scorer_id: string;
home_assist: string;
home_assist_id: string;
score: string;
away_scorer: string;
away_scorer_id: string;
away_assist: string;
away_assist_id: string;
info: string;
info_time: string;
}[];
cards?: {
time: string;
home_fault: string;
card: string;
away_fault: string;
info: string;
home_player_id: string;
away_player_id: string;
info_time: string;
}[];
substitutes?: {
time: string;
home_scorer:
| { in: string; out: string; in_id: number; out_id: number }
| any[];
away_scorer:
| { in: string; out: string; in_id: number; out_id: number }
| any[];
info: string;
info_time: string;
score: string;
}[];
lineups?: unknown;
statistics?: {
type: string;
home: string;
away: string;
}[];
}
export interface ApiResponse<T> {
code: number;
message: string;
data: T;
}
export interface FavoriteRequest {
matchId?: number;
notify?: boolean;
playerId?: number;
teamId?: number;
type: "match" | "team" | "player";
typeId: string;
}
export interface FavoriteCheckResponse {
favoriteId: number;
isFavorite: boolean;
}
export interface ApiListResponse<T> {
list: T[];
total: number;
}
export interface Country {
id: number;
code: string;
name: string;
flagIcon: string;
createdAt: string;
updatedAt: string;
isActive: boolean;
}
export interface League {
id: number;
key: string;
name: string;
description: string;
sportId: number;
countryKey: string;
countryName: string;
countryLogo: string;
logo: string;
isActive: boolean;
createdAt: string;
updatedAt: string;
}
export interface GoalEvent {
time: string;
home_scorer?: string;
away_scorer?: string;
score?: string;
comment?: string;
}
export interface CardEvent {
time: string;
home_fault?: string;
away_fault?: string;
card?: string;
comment?: string;
}
export interface SubstituteEvent {
time: string;
home_scorer?: string;
away_scorer?: string;
home_assist?: string;
away_assist?: string;
home_scorer_out?: string;
away_scorer_out?: string;
comment?: string;
}
export interface MatchEvents {
goalscorers: GoalEvent[];
cards: CardEvent[];
substitutes: SubstituteEvent[];
}
export interface Player {
// AllSports API 常见字段
player?: string; // 有些接口用 player
player_name?: string; // 有些接口用 player_name
name?: string; // 兜底
player_number?: number | string;
number?: number | string;
player_type?: string; // 位置/角色,例如 Goalkeepers
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
fav?: boolean;
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: {
ID: number;
CreatedAt: string;
UpdatedAt: string;
DeletedAt: string | null;
eventKey: string;
eventDate: string;
eventTime: string;
eventHomeTeam: string;
homeTeamKey: string;
homeTeamLogo: string;
eventAwayTeam: string;
awayTeamKey: string;
awayTeamLogo: string;
eventHalftimeResult: string;
eventFinalResult: string;
eventFtResult: string;
eventPenaltyResult: string;
eventStatus: string;
countryName: string;
leagueName: string;
leagueKey: string;
leagueRound: string;
leagueSeason: string;
eventLive: string;
eventStadium: string;
eventReferee: string;
eventCountryKey: string;
leagueLogo: string;
countryLogo: string;
eventHomeFormation: string;
eventAwayFormation: string;
fkStageKey: string;
stageName: string;
leagueGroup: string;
sportId: number;
eventQuarter: string;
eventSet: string;
eventType: string;
eventToss: string;
eventManOfMatch: string;
events?: MatchEvents;
players?: {
home_team?: Player[];
away_team?: Player[];
};
};
}
// 实时赔率数据项结构
export interface OddsItem {
odd_bookmakers: string;
odd_1?: number;
odd_x?: number;
odd_2?: number;
odd_12?: number;
odd_1x?: number;
odd_x2?: number;
"ah+1_1"?: number;
"ah+1_2"?: number;
"o+2.5"?: number;
"u+2.5"?: number;
[key: string]: any;
}
// 实时赔率响应数据结构
export interface OddsData {
[match_id: string]: {
data: OddsItem[];
};
}
// 搜索结果 - 联赛
export interface SearchLeague {
ID: number;
CreatedAt: string;
UpdatedAt: string;
DeletedAt: string | null;
name: string;
countryKey: string;
countryName: string;
countryLogo: string;
sportId: number;
logo: string;
description: string;
isActive: boolean;
key: string;
surface: string;
}
// 搜索结果 - 球员
export interface SearchPlayer {
ID: number;
CreatedAt: string;
UpdatedAt: string;
DeletedAt: string | null;
name: string;
countryKey: string;
countryName: string;
countryLogo: string;
teamKey: string;
teamName: string;
teamLogo: string;
leagueKey: string;
leagueName: string;
position: string;
photo: string;
key: string;
isActive: boolean;
playerNumber: string;
playerAge: string;
playerMatchPlayed: string;
playerGoals: string;
playerYellowCards: string;
playerRedCards: string;
playerMinutes: string;
playerInjured: string;
playerSubstituteOut: string;
playerSubstitutesOnBench: string;
playerAssists: string;
playerIsCaptain: string;
playerShotsTotal: string;
playerGoalsConceded: string;
playerFoulsCommited: string;
playerTackles: string;
playerBlocks: string;
playerCrossesTotal: string;
playerInterceptions: string;
playerClearances: string;
playerDispossesed: string;
playerSaves: string;
playerInsideBoxSaves: string;
playerDuelsTotal: string;
playerDuelsWon: string;
playerDribbleAttempts: string;
playerDribbleSucc: string;
playerPenComm: string;
playerPenWon: string;
playerPenScored: string;
playerPenMissed: string;
playerPasses: string;
playerPassesAccuracy: string;
playerKeyPasses: string;
playerRating: string;
sportId: number;
playerPoints: string;
playerRebounds: string;
playerSteals: string;
playerRank: string;
playerTitles: string;
playerBday: string;
playerRuns: string;
playerWickets: string;
playerOvers: string;
stats: any;
tournaments: any;
}
// 搜索结果 - 球队
export interface SearchTeam {
ID: number;
CreatedAt: string;
UpdatedAt: string;
DeletedAt: string | null;
name: string;
countryKey: string;
countryName: string;
countryLogo: string;
leagueKey: string;
leagueName: string;
leagueLogo: string;
logo: string;
description: string;
founded: number;
key: string;
isActive: boolean;
sportId: number;
}
// 搜索结果
export interface SearchResult {
leagues: SearchLeague[];
players: SearchPlayer[];
teams: SearchTeam[];
}
// H2H 历史对战比赛项
export interface H2HMatch {
away_team_key: number;
away_team_logo?: string;
country_name: string;
event_away_team: string;
event_country_key: number;
event_date: string;
event_final_result: string;
event_halftime_result: string;
event_home_team: string;
event_key: number;
event_live: string;
event_status: string;
event_time: string;
home_team_key: number;
home_team_logo?: string;
league_key: number;
league_name: string;
league_round: string;
league_season: string;
}
// H2H 历史对战数据
export interface H2HData {
H2H: H2HMatch[];
firstTeamResults: H2HMatch[];
secondTeamResults: H2HMatch[];
}
export interface AppleSignInRequest {
authorizationCode: string;
deviceInfo: {
deviceId: string;
platform: string;
platformVersion: string;
};
identityToken: string;
user?: {
name?: {
firstName?: string;
lastName?: string;
};
};
}
export interface AppleSignInResponse {
accessToken: string;
expiresIn: number;
refreshToken: string;
user: {
id: number;
appleId: string;
nickname: string;
avatar: string;
};
}
export interface RefreshTokenRequest {
refreshToken: string;
}
export interface RefreshTokenResponse {
accessToken: string;
expiresIn: number;
}
export interface UserProfile {
id: number;
appleId: string;
nickname: string;
avatar: string;
}
export interface FavoriteItem {
id: number;
type: string; // "match" | "team" | "player" | "league"
typeId: string;
matchId?: number;
teamId?: number;
playerId?: number;
match?: any;
team?: any;
player?: any;
notify: boolean;
createdAt: string;
}
export interface FavoriteListResponse {
list: FavoriteItem[];
total: number;
}