Browse Source

Adding some of the reworked API

Kirk Trombley 5 years ago
parent
commit
514369d2a3
3 changed files with 82 additions and 20 deletions
  1. 21 7
      README.md
  2. 56 10
      server/game_api.py
  3. 5 3
      server/misc_api.py

+ 21 - 7
README.md

@@ -23,33 +23,47 @@ PUT /game
         "gameId": string
     }
 GET /game/{ID}
-    Requires session cookie
     Returns {
+        "game_id": string,
+        "cretor": string,
         "timer": number,
         "coords": {
             "1": {
                 "lat": number,
-                "lon": number,
+                "lng": number,
             }, ...
-        }
+        },
+        "guesses": [
+            {
+                "name": string,
+                "totalScore": number,
+                "guesses": {
+                    "1": {
+                        "lat": number,
+                        "lng": number,
+                        "score": number,
+                    }, ...
+                }
+            }, ...
+        ]
     }
-GET /game/{ID}/guesses/{name}
+GET /game/{ID}/guesses
     Requires session cookie
     Returns {
         "currentRound": string || null,
         "guesses": {
             "1": {
                 "lat": number,
-                "lon": number,
+                "lng": number,
                 "score": number,
             }, ...
         }
     }
-POST /game/{ID}/guesses/{name}/{round}
+POST /game/{ID}/guesses/{round}
     Requires session cookie
     Accepts {
         "lat": number,
-        "lon": number,
+        "lng": number,
     }
     Returns 400 vs 201
 ```

+ 56 - 10
server/game_api.py

@@ -1,6 +1,10 @@
 from functools import wraps
+import uuid
 
-from flask import Blueprint, session, abort
+from flask import Blueprint, session, abort, request, current_app, jsonify
+
+from db import db, Game
+from lib import generate_coord
 
 game = Blueprint("game", __name__)
 
@@ -12,21 +16,63 @@ def require_name():
     return name
 
 
-@game.route("/", methods=["PUT"])
+def require_game(game_id):
+    g = Game.get(game_id)
+    if g is None:
+        abort(404)
+    return g
+
+
+@game.route("", methods=["PUT"])
 def create_game():
-    pass
+    name = require_name()
+    timer = request.json.get("timer", None)
+    if not isinstance(timer, int) or timer <= 0:
+        abort(400)
+
+    game_id = str(uuid.uuid4())
+    while Game.get(game_id) is not None:
+        # basically impossible collision, but let's be safe
+        game_id = str(uuid.uuid4())
+
+    coords = [generate_coord(current_app.config["GOOGLE_API_KEY"]) for _ in range(5)]
+    print(coords) # TODO
+
+    new_game = Game(
+        game_id=game_id,
+        timer=timer,
+        creator=name
+    )
+    db.session.add(new_game)
+    db.session.commit()
+
+    return jsonify({
+        "gameId": game_id
+    })
 
 
 @game.route("/<game_id>")
 def game_settings(game_id):
-    pass
+    g = require_game(game_id)
+
+    return jsonify({
+        "gameId": g.game_id,
+        "creator": g.creator,
+        "timer": g.timer,
+        "coords": {}, # TODO
+        "guesses": [], # TODO
+    })
 
 
-@game.route("/<game_id>/guesses/<name>")
-def guesses(game_id, name):
-    pass
+@game.route("/<game_id>/guesses")
+def guesses(game_id):
+    name = require_name()
+    g = require_game(game_id)
+    return "Unimplemented", 500 # TODO
 
 
-@game.route("/<game_id>/guesses/<name>/<round>", methods=["POST"])
-def make_guess(game_id, name, round):
-    pass
+@game.route("/<game_id>/guesses/<round>", methods=["POST"])
+def make_guess(game_id, round):
+    name = require_name()
+    g = require_game(game_id)
+    return "Unimplemented", 500 # TODO

+ 5 - 3
server/misc_api.py

@@ -10,11 +10,13 @@ def version():
 
 @misc.route("/name", methods=["POST"])
 def name():
-    js = request.json()
-    if current_app.config["GROUP_PASS"] != js.get("secret", None):
+    secret = request.json.get("secret", None)
+    if current_app.config["GROUP_PASS"] != secret:
         abort(400)
-    name = js.get("name", None)
+
+    name = request.json.get("name", None)
     if name is None:
         abort(400)
+
     session["name"] = name
     return "", 204