from sqlalchemy import String, Float, ForeignKey, UniqueConstraint from sqlalchemy.orm import relationship, mapped_column, Mapped from typing import Optional from pydantic import BaseModel from . import Base class Odds(Base): """ Odds table """ __tablename__ = "odds" __table_args__ = ( UniqueConstraint('fk_match_id', 'bookmaker', name='uq_odds_match_bookmaker'), {'schema': 'data', 'extend_existing': True} ) # Odds table columns id: Mapped[int] = mapped_column(primary_key=True) bookmaker: Mapped[str] = mapped_column(String, nullable=True) winner: Mapped[float] = mapped_column(Float, nullable=True) loser: Mapped[float] = mapped_column(Float, nullable=True) fk_match_id: Mapped[int] = mapped_column(ForeignKey("data.match.id", ondelete="CASCADE", name='odds_fk_match_id_fkey'), nullable=False) match: Mapped["Match"] = relationship("Match", back_populates="odds") # type: ignore # noqa: F821 # ----------------------------------------------------------- # Pydantic Model for Odds # ----------------------------------------------------------- class OddsApi(BaseModel): id: int bookmaker: Optional[str] winner: Optional[float] loser: Optional[float]