Pārlūkot izejas kodu

Reorganizing API

Kirk Trombley 5 gadi atpakaļ
vecāks
revīzija
24c0fca4af
6 mainītis faili ar 63 papildinājumiem un 42 dzēšanām
  1. 24 11
      README.md
  2. 2 2
      server/app.py
  3. 2 0
      server/db.py
  4. 0 28
      server/forms.py
  5. 15 1
      server/game_api.py
  6. 20 0
      server/misc_api.py

+ 24 - 11
README.md

@@ -3,17 +3,28 @@
 ## Back End
 ## Back End
 
 
 ```
 ```
-Pages/Form Endpoints
-GET  / -> Page with 3 forms for set name, new game, and join game
-POST /name -> Receive name (and secret?) from form
-POST /newGame -> Receive time limit from form
-POST /joinGame -> Receive ID from form
-GET  /summary/{ID} -> Return page summarizing game
-GET  /play/{ID} -> returns Front End w/ ID and name set
-
 API Endpoints
 API Endpoints
+GET /
+    Returns {
+        "version": string
+    }
+POST /name
+    Accepts {
+        "name": string,
+        "secret": string
+    }
+    Returns 400 vs 204, sets session cookie
+PUT /game
+    Requires session cookie
+    Accepts {
+        "timer": number
+    }
+    Returns {
+        "gameId": string
+    }
 GET /game/{ID}
 GET /game/{ID}
-    {
+    Requires session cookie
+    Returns {
         "timer": number,
         "timer": number,
         "coords": {
         "coords": {
             "1": {
             "1": {
@@ -23,7 +34,8 @@ GET /game/{ID}
         }
         }
     }
     }
 GET /game/{ID}/guesses/{name}
 GET /game/{ID}/guesses/{name}
-    {
+    Requires session cookie
+    Returns {
         "currentRound": string || null,
         "currentRound": string || null,
         "guesses": {
         "guesses": {
             "1": {
             "1": {
@@ -34,11 +46,12 @@ GET /game/{ID}/guesses/{name}
         }
         }
     }
     }
 POST /game/{ID}/guesses/{name}/{round}
 POST /game/{ID}/guesses/{name}/{round}
+    Requires session cookie
     Accepts {
     Accepts {
         "lat": number,
         "lat": number,
         "lon": number,
         "lon": number,
     }
     }
-    400 vs 201
+    Returns 400 vs 201
 ```
 ```
 
 
 ## Front End
 ## Front End

+ 2 - 2
server/app.py

@@ -2,7 +2,7 @@ from flask import Flask
 import toml
 import toml
 
 
 from db import db
 from db import db
-from forms import forms
+from misc_api import misc
 from game_api import game
 from game_api import game
 
 
 
 
@@ -17,7 +17,7 @@ def init_app():
     app.config["SQLALCHEMY_DATABASE_URI"] = secrets["db_uri"]
     app.config["SQLALCHEMY_DATABASE_URI"] = secrets["db_uri"]
     app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
     app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
 
 
-    app.register_blueprint(forms)
+    app.register_blueprint(misc)
     app.register_blueprint(game, url_prefix="/game")
     app.register_blueprint(game, url_prefix="/game")
 
 
     db.init_app(app)
     db.init_app(app)

+ 2 - 0
server/db.py

@@ -5,6 +5,8 @@ db = SQLAlchemy()
 class Game(db.Model):
 class Game(db.Model):
     game_id = db.Column(db.String, primary_key=True)
     game_id = db.Column(db.String, primary_key=True)
     timer = db.Column(db.Integer)
     timer = db.Column(db.Integer)
+    creator = db.Column(db.String)
 
 
     def __str__(self):
     def __str__(self):
         return f"Game({self.game_id}, {self.timer})"
         return f"Game({self.game_id}, {self.timer})"
+

+ 0 - 28
server/forms.py

@@ -1,28 +0,0 @@
-from flask import Blueprint
-
-forms = Blueprint("forms", __name__)
-
-
-@forms.route("/")
-def home():
-    pass
-
-
-@forms.route("/name", methods=["POST"])
-def set_name():
-    pass
-
-
-@forms.route("/newGame", methods=["POST"])
-def new_game():
-    pass
-
-
-@forms.route("/joinGame", methods=["POST"])
-def join_game():
-    pass
-
-
-@forms.route("/summary/<game_id>")
-def summary(game_id):
-    pass

+ 15 - 1
server/game_api.py

@@ -1,8 +1,22 @@
-from flask import Blueprint, jsonify
+from functools import wraps
+
+from flask import Blueprint, session, abort
 
 
 game = Blueprint("game", __name__)
 game = Blueprint("game", __name__)
 
 
 
 
+def require_name():
+    name = session.get("name", None)
+    if name is None:
+        abort(401)
+    return name
+
+
+@game.route("/", methods=["PUT"])
+def create_game():
+    pass
+
+
 @game.route("/<game_id>")
 @game.route("/<game_id>")
 def game_settings(game_id):
 def game_settings(game_id):
     pass
     pass

+ 20 - 0
server/misc_api.py

@@ -0,0 +1,20 @@
+from flask import Blueprint, jsonify, session, request, current_app, abort
+
+misc = Blueprint("misc", __name__)
+
+
+@misc.route("/")
+def version():
+    return jsonify({"version": "1"})
+
+
+@misc.route("/name", methods=["POST"])
+def name():
+    js = request.json()
+    if current_app.config["GROUP_PASS"] != js.get("secret", None):
+        abort(400)
+    name = js.get("name", None)
+    if name is None:
+        abort(400)
+    session["name"] = name
+    return "", 204