models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. game_mode = Column(String)
  15. clock_mode = Column(String)
  16. score_method = Column(String)
  17. round_point_cap = Column(Integer)
  18. created_at = Column(DateTime)
  19. coordinates = relationship("Coordinate", lazy=True, order_by="Coordinate.round_number")
  20. players = relationship("Player", lazy=True, backref="game")
  21. class Player(Base):
  22. __tablename__ = "player"
  23. player_id = Column(Integer, primary_key=True, autoincrement=True)
  24. game_id = Column(String, ForeignKey("game.game_id"))
  25. player_name = Column(String)
  26. guesses = relationship("Guess", lazy=True, order_by="Guess.round_number")
  27. class Coordinate(Base):
  28. __tablename__ = "coordinate"
  29. game_id = Column(String, ForeignKey("game.game_id"), primary_key=True)
  30. round_number = Column(Integer, primary_key=True, autoincrement=False)
  31. country_code = Column(String)
  32. latitude = Column(Float)
  33. longitude = Column(Float)
  34. class Guess(Base):
  35. __tablename__ = "guess"
  36. player_id = Column(Integer, ForeignKey("player.player_id"), primary_key=True, autoincrement=False)
  37. round_number = Column(Integer, primary_key=True, autoincrement=False)
  38. latitude = Column(Float)
  39. longitude = Column(Float)
  40. country_code = Column(String)
  41. round_score = Column(Integer)
  42. time_remaining = Column(Float)
  43. created_at = Column(DateTime, default=datetime.utcnow)