175 lines
6.9 KiB
Python
175 lines
6.9 KiB
Python
from typing import AnyStr, Dict, Any
|
|
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Boolean
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from db.models.base import Base, BaseMixin
|
|
|
|
|
|
class Sport(Base, BaseMixin):
|
|
__tablename__ = "sport"
|
|
__table_args__ = (
|
|
UniqueConstraint("name"),
|
|
)
|
|
name = Column(String, nullable=False, index=True, unique=True)
|
|
teams = relationship("Team")
|
|
positions = relationship("FieldPosition")
|
|
|
|
def __repr__(self):
|
|
return f"Sport(id={self.id}, name={self.name}, created_date={self.created_date})"
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
|
|
|
|
class Team(Base, BaseMixin):
|
|
__tablename__ = "team"
|
|
name = Column(String, nullable=False, index=True, unique=True)
|
|
short_name = Column(String, nullable=False, )
|
|
sport_id = Column(String, ForeignKey("sport.id"), nullable=False)
|
|
sport = relationship("Sport", back_populates="teams")
|
|
roosters = relationship("Rooster")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
self.short_name = import_data['short_name']
|
|
self.sport_id = import_data['sport_id']
|
|
|
|
|
|
class FieldPosition(Base, BaseMixin):
|
|
__tablename__ = "field_position"
|
|
__table_args__ = (
|
|
UniqueConstraint("name", "sport_id"),
|
|
UniqueConstraint("short_name", "sport_id"),
|
|
)
|
|
name = Column(String, nullable=False, index=True)
|
|
short_name = Column(String, nullable=False)
|
|
sport_id = Column(String, ForeignKey("sport.id"), nullable=False, index=True)
|
|
sport = relationship("Sport", back_populates="positions")
|
|
roosters = relationship("Rooster")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
self.short_name = import_data['short_name']
|
|
self.sport_id = import_data['sport_id']
|
|
|
|
|
|
class Player(Base, BaseMixin):
|
|
__tablename__ = "player"
|
|
__table_args__ = (
|
|
UniqueConstraint("first_name", "last_name"),
|
|
)
|
|
first_name = Column(String, nullable=False, index=True)
|
|
last_name = Column(String, nullable=False, index=True)
|
|
roosters = relationship("Rooster")
|
|
|
|
def get_full_name(self) -> str:
|
|
return f"{self.last_name}, {self.first_name}"
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.first_name = import_data['first_name']
|
|
self.last_name = import_data['last_name']
|
|
|
|
|
|
class Rooster(Base, BaseMixin):
|
|
__tablename__ = "rooster"
|
|
__table_args__ = (
|
|
UniqueConstraint("year", "team_id", "player_id", "position_id"),
|
|
)
|
|
year = Column(Integer)
|
|
team_id = Column(String, ForeignKey("team.id"), nullable=False, index=True)
|
|
team = relationship("Team", back_populates="roosters")
|
|
player_id = Column(String, ForeignKey("player.id"), nullable=False, index=True)
|
|
player = relationship("Player", back_populates="roosters")
|
|
position_id = Column(String, ForeignKey("field_position.id"), nullable=False, index=True)
|
|
position = relationship("FieldPosition", back_populates="roosters")
|
|
cards = relationship("Card")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.year = import_data['year']
|
|
self.team_id = import_data['team_id']
|
|
self.player_id = import_data['player_id']
|
|
self.position_id = import_data['position_id']
|
|
|
|
|
|
class Vendor(Base, BaseMixin):
|
|
__tablename__ = "vendor"
|
|
name = Column(String, nullable=False, unique=True, index=True)
|
|
card_sets = relationship("CardSet")
|
|
cards = relationship("Card")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
|
|
|
|
class CardSet(Base, BaseMixin):
|
|
__tablename__ = "card_set"
|
|
__table_args__ = (
|
|
UniqueConstraint("name", "vendor_id"),
|
|
)
|
|
name = Column(String, index=True)
|
|
parallel_set = Column(Boolean)
|
|
insert_set = Column(Boolean)
|
|
vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False, index=True)
|
|
vendor = relationship("Vendor", back_populates="card_sets")
|
|
cards = relationship("Card")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, AnyStr]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
self.parallel_set = import_data['parallel_set']
|
|
self.insert_set = import_data['insert_set']
|
|
self.vendor_id = import_data['vendor_id']
|
|
|
|
|
|
class Card(Base, BaseMixin):
|
|
__tablename__ = "card"
|
|
__table_args__ = (
|
|
UniqueConstraint("card_number", "year", "vendor_id", "card_set_id"),
|
|
)
|
|
card_number = Column(Integer, index=True)
|
|
year = Column(Integer, index=True)
|
|
card_set_id = Column(String, ForeignKey("card_set.id"), nullable=False)
|
|
card_set = relationship("CardSet", back_populates="cards")
|
|
rooster_id = Column(String, ForeignKey("rooster.id"), nullable=False)
|
|
rooster = relationship("Rooster", back_populates="cards")
|
|
vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False)
|
|
vendor = relationship("Vendor", back_populates="cards")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.card_number = import_data['card_number']
|
|
self.year = import_data['year']
|
|
self.card_set_id = import_data['card_set_id']
|
|
self.rooster_id = import_data['rooster_id']
|
|
self.vendor_id = import_data['vendor_id']
|