Просмотр исходного кода

Fixing some imports and making the create game into a static method (fixing a bug)

Kirk Trombley 5 лет назад
Родитель
Сommit
6a8f99d4c0
2 измененных файлов с 41 добавлено и 35 удалено
  1. 38 29
      server/db.py
  2. 3 6
      server/game_api.py

+ 38 - 29
server/db.py

@@ -1,5 +1,9 @@
+import uuid
+
 from flask_sqlalchemy import SQLAlchemy
 
+from lib import generate_coord
+
 db = SQLAlchemy()
 session = db.session
 
@@ -12,6 +16,40 @@ class Game(db.Model):
     coord_set = db.relationship("CoordSet")
     guess_sets = db.relationship("GuessSet", backref="game", lazy=True)
 
+    @staticmethod
+    def create(timer, creator):
+        game_id = str(uuid.uuid4())
+        while Game.query.get(game_id) is not None:
+            # basically impossible collision, but let's be safe
+            game_id = str(uuid.uuid4())
+
+        cs = CoordSet()
+        for round_num in "12345":
+            coord = generate_coord()
+            cs.set_coord(round_num, *coord)
+        db.session.add(cs)
+        db.session.commit()
+
+        new_game = Game(
+            game_id=game_id,
+            timer=timer,
+            creator=creator,
+            coord_set=cs
+        )
+        db.session.add(new_game)
+        db.session.commit()
+
+        gs = GuessSet(
+            game_id=game_id, 
+            player_name=creator, 
+            coord_set=CoordSet()
+        )
+        db.session.add(gs)
+        db.session.commit()
+
+        return new_game
+
+
     def __str__(self):
         return f"Game({self.game_id}, {self.timer})"
 
@@ -32,35 +70,6 @@ class Game(db.Model):
         }
 
 
-def create_game():
-    game_id = str(uuid.uuid4())
-    while Game.query.get(game_id) is not None:
-        # basically impossible collision, but let's be safe
-        game_id = str(uuid.uuid4())
-
-    cs = CoordSet()
-    for round_num in "12345":
-        coord = generate_coord()
-        cs.set_coord(round_num, *coord)
-    db.session.add(cs)
-    db.session.commit()
-
-    new_game = Game(
-        game_id=game_id,
-        timer=timer,
-        creator=name,
-        coord_set=cs
-    )
-    db.session.add(new_game)
-    db.session.commit()
-
-    gs = GuessSet(game_id=game_id, player_name=name, coord_set=CoordSet())
-    db.session.add(gs)
-    db.session.commit()
-
-    return new_game
-
-
 class CoordSet(db.Model):
     coord_id = db.Column(db.Integer, primary_key=True)
     coord_1 = db.Column(db.String)

+ 3 - 6
server/game_api.py

@@ -1,10 +1,7 @@
-from functools import wraps
-import uuid
-
 from flask import Blueprint, abort, request, jsonify
 
 import db
-from lib import generate_coord, score
+import lib
 
 game = Blueprint("game", __name__)
 
@@ -38,7 +35,7 @@ def create_game():
     if not isinstance(timer, int) or timer <= 0:
         abort(400)
 
-    new_game = db.create_game()
+    new_game = db.Game.create(timer, name)
 
     return jsonify({"gameId": new_game.game_id})
 
@@ -98,7 +95,7 @@ def make_guess(game_id, round_num):
         abort(400)
 
     target = require_game(game_id).coord_set.get_coord(round_num)
-    guess_score, distance = score(target, (lat, lng))
+    guess_score, distance = lib.score(target, (lat, lng))
     gs.set_guess(round_num, lat, lng, guess_score)
     db.session.commit()
     return jsonify({