Spaces:
Running
Running
File size: 2,832 Bytes
1bb9c62 e99662b 1bb9c62 d25bf89 1bb9c62 e99662b 1bb9c62 e99662b 1bb9c62 d25bf89 075cf25 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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]
|