models.py 1.7 KB

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