db.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from flask_sqlalchemy import SQLAlchemy
  2. db = SQLAlchemy()
  3. class Game(db.Model):
  4. game_id = db.Column(db.String, primary_key=True)
  5. timer = db.Column(db.Integer)
  6. creator = db.Column(db.String)
  7. coord_id = db.Column(db.Integer, db.ForeignKey("coord_set.coord_id"))
  8. coord_set = db.relationship("CoordSet")
  9. guess_sets = db.relationship("GuessSet", backref="game", lazy=True)
  10. def __str__(self):
  11. return f"Game({self.game_id}, {self.timer})"
  12. class CoordSet(db.Model):
  13. coord_id = db.Column(db.Integer, primary_key=True)
  14. coord_1 = db.Column(db.String)
  15. coord_2 = db.Column(db.String)
  16. coord_3 = db.Column(db.String)
  17. coord_4 = db.Column(db.String)
  18. coord_5 = db.Column(db.String)
  19. def to_dict(self):
  20. to_return = {}
  21. for r, c in zip(("1", "2", "3", "4", "5"), (self.coord_1, self.coord_2, self.coord_3, self.coord_4, self.coord_5)):
  22. if c is None:
  23. continue
  24. lat, lng = c.split(",")
  25. to_return[r] = {
  26. "lat": float(lat),
  27. "lng": float(lng)
  28. }
  29. return to_return
  30. class GuessSet(db.Model):
  31. game_id = db.Column(db.String, db.ForeignKey("game.game_id"), primary_key=True)
  32. player_name = db.Column(db.String, primary_key=True)
  33. coord_id = db.Column(db.Integer, db.ForeignKey("coord_set.coord_id"))
  34. coord_set = db.relationship("CoordSet")
  35. score_1 = db.Column(db.Integer)
  36. score_2 = db.Column(db.Integer)
  37. score_3 = db.Column(db.Integer)
  38. score_4 = db.Column(db.Integer)
  39. score_5 = db.Column(db.Integer)
  40. def to_dict(self):
  41. c = self.coords.to_dict()
  42. for r, s in zip(("1", "2", "3", "4", "5"), (self.score_1, self.score_2, self.score_3, self.score_4, self.score_5)):
  43. if r not in c:
  44. continue
  45. c[r]["score"] = s
  46. return c