models.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from datetime import datetime
  2. from sqlalchemy import Column, Integer, String, Boolean, Float, DateTime, ForeignKey
  3. from sqlalchemy.orm import relationship
  4. from sqlalchemy.ext.declarative import declarative_base
  5. Base = declarative_base()
  6. class Game(Base):
  7. __tablename__ = 'game'
  8. game_id = Column(String, primary_key=True)
  9. linked_game = Column(String)
  10. timer = Column(Integer)
  11. rounds = Column(Integer)
  12. country_lock = Column(String)
  13. generation_method = Column(String)
  14. rule_set = Column(String)
  15. coordinates = relationship("Coordinate", lazy=True, order_by="Coordinate.round_number")
  16. players = relationship("Player", lazy=True, backref="game")
  17. class Player(Base):
  18. __tablename__ = "player"
  19. player_id = Column(Integer, primary_key=True, autoincrement=True)
  20. game_id = Column(String, ForeignKey("game.game_id"))
  21. player_name = Column(String)
  22. guesses = relationship("Guess", lazy=True, order_by="Guess.round_number")
  23. class Coordinate(Base):
  24. __tablename__ = "coordinate"
  25. game_id = Column(String, ForeignKey("game.game_id"), primary_key=True)
  26. round_number = Column(Integer, primary_key=True, autoincrement=False)
  27. country_code = Column(String)
  28. latitude = Column(Float)
  29. longitude = Column(Float)
  30. class Guess(Base):
  31. __tablename__ = "guess"
  32. player_id = Column(Integer, ForeignKey("player.player_id"), primary_key=True, autoincrement=False)
  33. round_number = Column(Integer, primary_key=True, autoincrement=False)
  34. latitude = Column(Float)
  35. longitude = Column(Float)
  36. country_code = Column(String)
  37. round_score = Column(Integer)
  38. time_remaining = Column(Float)
  39. created_at = Column(DateTime, default=datetime.utcnow)