All files / src/types game.types.ts

0% Statements 0/0
0% Branches 1/1
0% Functions 1/1
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110                                                                                                                                                                                                                           
/**
 * Type definitions for games and odds
 */
 
export interface Sport {
  id: string;
  key: string;
  name: string;
  active: boolean;
}
 
export interface Team {
  id: string;
  name: string;
  abbreviation?: string;
  logo?: string;
}
 
export interface GameOdds {
  spread?: {
    line: number;
    odds: number;
  };
  total?: {
    line: number;
    odds: number;
  };
  moneyline?: number;
}
 
export interface Game {
  id: string;
  sportKey: string;
  sportName: string;
  awayTeamName: string;
  homeTeamName: string;
  commenceTime: string;
  venue?: string;
  weather?: string;
  status: 'scheduled' | 'in_progress' | 'completed' | 'postponed' | 'cancelled';
  awayScore?: number;
  homeScore?: number;
  awayOdds?: GameOdds;
  homeOdds?: GameOdds;
  createdAt: string;
  updatedAt: string;
}
 
export interface BetSelection {
  gameId: string;
  selectionType: 'moneyline' | 'spread' | 'total';
  selection: 'home' | 'away' | 'over' | 'under';
  odds: number;
  line?: number;
  gameName: string;
  teamName?: string;
}
 
export interface BetLeg {
  id?: string;
  gameId: string;
  selectionType: 'moneyline' | 'spread' | 'total';
  selection: 'home' | 'away' | 'over' | 'under';
  odds: number;
  line?: number;
  teamName?: string;
  status?: 'pending' | 'won' | 'lost' | 'push';
  game?: Game;
  sgpGroupId?: string | null;
  userAdjustedOdds?: number;
}
 
export interface FutureLeg {
  id?: string;
  futureId: string;
  futureTitle: string;
  outcome: string;
  odds: number;
  status?: 'pending' | 'won' | 'lost' | 'push';
  sportKey?: string;
  userAdjustedOdds?: number;
}
 
export interface Bet {
  id: string;
  name: string;
  betType: 'single' | 'parlay' | 'teaser';
  status: 'pending' | 'won' | 'lost' | 'push' | 'cancelled';
  stake: number;
  oddsAtPlacement: number;
  potentialPayout?: number;
  actualPayout?: number;
  placedAt: string;
  settledAt?: string;
  legs: BetLeg[];
  futureLegs?: FutureLeg[];
}
 
export interface BetStats {
  totalBets: number;
  wonBets: number;
  lostBets: number;
  pushBets: number;
  winRate: number;
  totalStaked: number;
  totalReturn: number;
  netProfit: number;
  roi: number;
}