Procházet zdrojové kódy

Moving some logic out of db and into game_api

Kirk Trombley před 5 roky
rodič
revize
befeb26f22
2 změnil soubory, kde provedl 25 přidání a 23 odebrání
  1. 2 21
      server/db.py
  2. 23 2
      server/game_api.py

+ 2 - 21
server/db.py

@@ -18,7 +18,7 @@ class Game(db.Model):
     players = db.relationship("Player", lazy=True, backref="game")
 
     @staticmethod
-    def create(timer, rounds, only_america=False):
+    def create(timer, rounds, only_america, coords):
         game_id = str(uuid.uuid4())
         while Game.query.get(game_id) is not None:
             # basically impossible collision, but let's be safe
@@ -32,11 +32,7 @@ class Game(db.Model):
         )
         db.session.add(new_game)
 
-        for round_num in range(rounds):
-            maybe_coord = generate_coord(only_america=only_america)
-            while maybe_coord is None:
-                maybe_coord = generate_coord(only_america=only_america)
-            (lat, lng) = maybe_coord
+        for (round_num, (lat, lng)) in enumerate(coords):
             coord = Coordinate(
                 game_id=game_id,
                 round_number=round_num+1,
@@ -96,21 +92,6 @@ class Player(db.Model):
     def add_timeout(self, round_num):
         self.add_guess(round_num, -200, -200, None)
 
-    def to_dict(self):
-        return {
-            "name": self.player_name,
-            "currentRound": self.get_current_round(),
-            "totalScore": self.get_total_score(),
-            "guesses": {
-                str(g.round_number): {
-                    "lat": g.latitude,
-                    "lng": g.longitude,
-                    "score": g.round_score,
-                    "timeRemaining": g.time_remaining,
-                } for g in self.guesses
-            },
-        }
-
 
 class Coordinate(db.Model):
     game_id = db.Column(db.String, db.ForeignKey("game.game_id"), primary_key=True)

+ 23 - 2
server/game_api.py

@@ -45,7 +45,14 @@ def create_game():
     if not isinstance(only_america, bool):
         abort(400)
 
-    new_game = db.Game.create(timer, rounds, only_america=only_america)
+    coords = []
+    for round_num in range(rounds):
+        maybe_coord = lib.generate_coord(only_america=only_america)
+        while maybe_coord is None:
+            maybe_coord = lib.generate_coord(only_america=only_america)
+        coords.append(maybe_coord)
+
+    new_game = db.Game.create(timer, rounds, only_america, coords)
 
     return jsonify({"gameId": new_game.game_id})
 
@@ -74,7 +81,21 @@ def coords(game_id):
 @game.route("/<game_id>/players")
 def players(game_id):
     g = require_game(game_id)
-    return jsonify({"players": [p.to_dict() for p in g.players]})
+    return jsonify({
+        "players": [{
+            "name": p.player_name,
+            "currentRound": p.get_current_round(),
+            "totalScore": p.get_total_score(),
+            "guesses": {
+                str(g.round_number): {
+                    "lat": g.latitude,
+                    "lng": g.longitude,
+                    "score": g.round_score,
+                    "timeRemaining": g.time_remaining,
+                } for g in p.guesses
+            },
+        } for p in g.players]
+    })
 
 
 @game.route("/<game_id>/linked", methods=["GET", "POST"])