from datetime import datetime from typing import Optional, Union, List, Dict from pydantic import BaseModel, Field, Json class MysqlConfig(BaseModel): host: str port: int db_name: str user: str password: str class OddsjamOrderStatus: def __init__(self, data): if data.get("home_edge_percent") is not None: self.home_away = "home" else: self.home_away = "away" self.sportsbooks = data.get(self.home_away + "_sportsbooks") self.bet_name = data.get(self.home_away + "_bet_name") self.market = data.get("market") self.price = data.get(self.home_away + "_price") self.stake = 1 self.event_name = f'{data.get("home_team")} vs {data.get("away_team")}' self.sport = data.get("sport") self.league = data.get("league") self.game_id = data.get("game_id") self.bet_type = 'Positive EV' self.bet_id = data.get("bet_id") self.create_time = data.get("create_time") self.start_timestamp = data.get("start_timestamp") def to_dict(self): return { "home_away": self.home_away, "sportsbooks": self.sportsbooks, "bet_name": self.bet_name, "market": self.market, "price": self.price, "stake": self.stake, "event_name": self.event_name, "sport": self.sport, "league": self.league, "game_id": self.game_id, "bet_type": self.bet_type, "bet_id": self.bet_id, "start_timestamp": self.start_timestamp, "create_time": self.create_time } class OddsJamOrder(BaseModel): id: str = Field(..., description="主键,自增ID") bet_id: Optional[str] = Field(None, description="投注ID") game_id: Optional[str] = Field(None, description="比赛ID") away_bet_name: Optional[str] = Field(None, description="客队投注名称") home_bet_name: Optional[str] = Field(None, description="主队投注名称") away_no_vig_price: Optional[float] = Field(None, description="客队无佣金价格") home_no_vig_price: Optional[float] = Field(None, description="主队无佣金价格") away_price: Optional[float] = Field(None, description="客队价格") home_price: Optional[float] = Field(None, description="主队价格") away_sportsbooks: Optional[Json[List[str]]] = Field( None, description="客队的体育书籍,JSON格式") home_sportsbooks: Optional[Json[List[str]]] = Field( None, description="主队的体育书籍,JSON格式") is_live: Optional[bool] = Field(None, description="是否为直播") in_game_status: Optional[str] = Field(None, description="比赛状态") period: Optional[str] = Field(None, description="比赛时段") clock: Optional[str] = Field(None, description="比赛时钟") last_play: Optional[str] = Field(None, description="最后一次比赛") home_score: Optional[int] = Field(None, description="主队得分") away_score: Optional[int] = Field(None, description="客队得分") sport: Optional[str] = Field(None, description="运动类型") league: Optional[str] = Field(None, description="联赛") market: Optional[str] = Field(None, description="市场") market_width: Optional[float] = Field(None, description="市场宽度") percentage: Optional[float] = Field(None, description="百分比") start_date: Optional[datetime] = Field(None, description="比赛开始日期时间") home_team: Optional[str] = Field(None, description="主队") away_team: Optional[str] = Field(None, description="客队") timestamp: Optional[float] = Field(None, description="时间戳") away_deep_link_map: Optional[str] = Field( None, description="客队深度链接映射,JSON格式") home_deep_link_map: Optional[str] = Field( None, description="主队深度链接映射,JSON格式") status: Optional[str] = Field(None, description="状态") away_edge_percent: Optional[float] = Field(None, description="客队边缘百分比") bet_placed: Optional[bool] = Field(None, description="是否下注") same_market_bet_placed: Optional[bool] = Field( None, description="是否在同一市场下注") same_game_bet_placed: Optional[bool] = Field(None, description="是否在同一比赛下注") away_rec_size: Optional[int] = Field(None, description="客队推荐大小") rec_size: Optional[int] = Field(None, description="推荐大小") home_edge_percent: Optional[float] = Field(None, description="主队边缘百分比") order_status: int = Field(0, description="订单状态") amount: Optional[int] = Field(None, description="下单金额,整数") create_time: Optional[str] = Field(None, description="创建时间") sportsbook_orderid: Optional[str] = Field(None, description="博彩公司订单ID") home_or_away: Optional[str] = Field(None, description="主队或客队") start_timestamp: Optional[int] = Field(None, description="开始时间戳") selected_sportsbook: Optional[str] = Field(None, description="选定的博彩公司") bet_status: Optional[str] = Field(None, description="投注状态") class OddsjamBet(BaseModel): Sportsbook: str BetName: str MarketName: str Odds: int Stake: int EventName: str Sport: str League: str GameID: str GameStartDate: str BetType: str Notes: str