530 lines
11 KiB
TypeScript
530 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?: number;
|
|
leagueLogo?: string;
|
|
countryName?: string;
|
|
countryKey?: string;
|
|
countryLogo?: string;
|
|
events?: string;
|
|
players?: string;
|
|
sportId?: number;
|
|
leagueId?: number;
|
|
isLive?: boolean;
|
|
meta?: string;
|
|
odds?: OddsItem[];
|
|
}
|
|
|
|
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;
|
|
matchCount: number;
|
|
}
|
|
|
|
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;
|
|
}
|