56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
|
|
class RoomState(str, Enum):
|
|
WAITING = "waiting"
|
|
RUNNING = "running"
|
|
FINISHED = "finished"
|
|
INTERRUPTED = "interrupted"
|
|
|
|
|
|
class HorseState(str, Enum):
|
|
READY = "ready"
|
|
RACING = "racing"
|
|
FINISHED = "finished"
|
|
|
|
|
|
@dataclass
|
|
class Horse:
|
|
owner_id: str
|
|
name: str
|
|
position: float = 0.0
|
|
state: HorseState = HorseState.READY
|
|
|
|
|
|
@dataclass
|
|
class Bet:
|
|
user_id: str
|
|
horse_name: str
|
|
amount: int
|
|
|
|
|
|
@dataclass
|
|
class Room:
|
|
scope: str
|
|
state: RoomState = RoomState.WAITING
|
|
created_at: datetime = field(default_factory=datetime.now)
|
|
horses: dict[str, Horse] = field(default_factory=dict)
|
|
bets: list[Bet] = field(default_factory=list)
|
|
champion_name: Optional[str] = None
|
|
tick_count: int = 0
|
|
|
|
|
|
@dataclass
|
|
class RaceResult:
|
|
race_id: str
|
|
scope: str
|
|
champion_name: str
|
|
champion_owner: str
|
|
participants: list[str]
|
|
bet_distribution: dict[str, int]
|
|
duration_ticks: int
|
|
completed_at: datetime
|