models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. only_america = Column(Boolean)
  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. latitude = Column(Float)
  28. longitude = Column(Float)
  29. class Guess(Base):
  30. __tablename__ = "guess"
  31. player_id = Column(Integer, ForeignKey("player.player_id"), primary_key=True, autoincrement=False)
  32. round_number = Column(Integer, primary_key=True, autoincrement=False)
  33. latitude = Column(Float)
  34. longitude = Column(Float)
  35. round_score = Column(Integer)
  36. time_remaining = Column(Float)
  37. created_at = Column(DateTime, default=datetime.utcnow)