From 2b29a1c66202cd4e25b9b8e12a9c0fd030ea4a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janek=20Hlavat=C3=BD?= Date: Sat, 21 Mar 2026 19:39:39 +0100 Subject: [PATCH] Implement data types contract --- src/beaky/datamodels/ticket.py | 55 +++++++++++++++++++++++++--- src/beaky/resolvers/win_draw_lose.py | 12 ------ 2 files changed, 49 insertions(+), 18 deletions(-) delete mode 100644 src/beaky/resolvers/win_draw_lose.py diff --git a/src/beaky/datamodels/ticket.py b/src/beaky/datamodels/ticket.py index 3a716f1..b918a4e 100644 --- a/src/beaky/datamodels/ticket.py +++ b/src/beaky/datamodels/ticket.py @@ -1,21 +1,64 @@ -from abc import ABC +from abc import ABC, abstractmethod from enum import Enum +from typing import Literal from pydantic.dataclasses import dataclass -from typing import Callable - +from datetime import datetime class TicketType(str, Enum): WIN_DRAW_LOSE = "win_draw_lose" - # postup? + ADVANCED = "advance" WIN_DRAW_LOSE_DOUBLE = "win_draw_lose_double" WIN_LOSE = "win_lose" BOTH_TEAM_SCORED = "both_team_scored" GOAL_AMOUNT = "goal_amount" ... -# Classes that inherit from this are defined in resolution file, so the deciding function can be used @dataclass class Ticket(ABC): ticketType: TicketType - decidingFunction: Callable + team1Name: str + team2Name: str + date: datetime + # other fields that might be interesting for resolving (like bet type in WinDrawLose) + @abstractmethod + def resolve(self): pass + +class WinDrawLose(Ticket): + """Výsledek zápasu 1X2""" + ticketType: TicketType.WIN_DRAW_LOSE + betType: Literal["X", "0", "1", "2"] + def resolve(self): + ... + +class Advance(Ticket): + """What team advances to next round""" + ticketType: TicketType.WIN_DRAW_LOSE + def resolve(self): + raise NotImplementedError("Vyser si voko vine") + +class WinDrawLoseDouble(Ticket): + """Výsledek zápasu - double""" + ticketType: TicketType.WIN_DRAW_LOSE_DOUBLE + betType: Literal["01", "12", "02"] + def resolve(self): + ... + +class WinLose(Ticket): + """Výsledek zápasu bez remízy""" + ticketType: TicketType.WIN_LOSE + betType: Literal["0", "1"] + def resolve(self): + ... + +class BothTeamScored(Ticket): + ticketType: TicketType.BOTH_TEAM_SCORED + def resolve(self): + ... + +class GoalAmount(Ticket): + ticketType: TicketType.GOAL_AMOUNT + team_bet: Literal["1", "2"] # if we are betting for team 1 or team 2 + handicap_amount: float # -0.5, +1.5 .... + def resolve(self): + ... diff --git a/src/beaky/resolvers/win_draw_lose.py b/src/beaky/resolvers/win_draw_lose.py deleted file mode 100644 index d841cec..0000000 --- a/src/beaky/resolvers/win_draw_lose.py +++ /dev/null @@ -1,12 +0,0 @@ - - - -Class WinDrawLose(Ticket): - ticketType: TicketType.WIN_DRAW_LOSE - decidingFunc: f - - - -def f(ticket: WinDrawLose): - call endpoint - return True