Spaces:
Running
Running
| from datetime import date | |
| from sqlalchemy import Integer, String, ForeignKey | |
| from sqlalchemy.orm import relationship, mapped_column, Mapped | |
| from typing import List, Optional | |
| from pydantic import BaseModel | |
| from . import Base | |
| class Player(Base): | |
| """ | |
| Player table | |
| """ | |
| __tablename__ = "player" | |
| __table_args__ = {'schema': 'data'} | |
| # Player table columns | |
| id: Mapped[int] = mapped_column(primary_key=True) | |
| name: Mapped[str] = mapped_column(String, nullable=True) | |
| tennis_id: Mapped[str] = mapped_column(String, nullable=True) | |
| caracteristics: Mapped["Caracteristics"] = relationship("Caracteristics", back_populates="player", cascade="all, delete-orphan") | |
| matches_won: Mapped[List["Match"]] = relationship("Match", back_populates="winner", foreign_keys='Match.fk_winner_id') | |
| matches_lost: Mapped[List["Match"]] = relationship("Match", back_populates="loser", foreign_keys='Match.fk_loser_id') | |
| class Caracteristics(Base): | |
| """ | |
| Caracteristics table | |
| """ | |
| __tablename__ = "caracteristics" | |
| __table_args__ = {'schema': 'data'} | |
| # Caracteristics table columns | |
| id: Mapped[int] = mapped_column(primary_key=True) | |
| nationality: Mapped[str] = mapped_column(String, nullable=True) | |
| last_name: Mapped[str] = mapped_column(String, nullable=True) | |
| first_name: Mapped[str] = mapped_column(String, nullable=True) | |
| play_hand: Mapped[str] = mapped_column(String, nullable=True) | |
| back_hand: Mapped[int] = mapped_column(Integer, nullable=True) | |
| height_cm: Mapped[int] = mapped_column(Integer, nullable=True) | |
| weight_kg: Mapped[int] = mapped_column(Integer, nullable=True) | |
| date_of_birth: Mapped[date] = mapped_column(String, nullable=True) | |
| pro_year: Mapped[Integer] = mapped_column(Integer, nullable=True) | |
| fk_player_id: Mapped[int] = mapped_column(ForeignKey("data.player.id", ondelete="CASCADE", name='caracteristics_fk_player_id_fkey'), nullable=False) | |
| player: Mapped["Player"] = relationship("Player", back_populates="caracteristics") | |
| # ----------------------------------------------------------- | |
| # Pydantic Model for Player | |
| # ----------------------------------------------------------- | |
| class PlayerApiBase(BaseModel): | |
| id: int | |
| name: str | |
| tennis_id: Optional[str] | |
| class PlayerApiDetail(PlayerApiBase): | |
| caracteristics: Optional['CaracteristicsApi'] | |
| # ----------------------------------------------------------- | |
| # Pydantic Model for Caracteristics | |
| # ----------------------------------------------------------- | |
| class CaracteristicsApi(BaseModel): | |
| id: int | |
| nationality: Optional[str] | |
| last_name: Optional[str] | |
| first_name: Optional[str] | |
| play_hand: Optional[str] | |
| back_hand: Optional[int] | |
| height_cm: Optional[int] | |
| weight_kg: Optional[int] | |
| date_of_birth: Optional[date] | |
| pro_year: Optional[int] | |