12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- from functools import wraps
- import uuid
- from flask import Blueprint, session, abort, request, current_app, jsonify
- from db import db, Game, CoordSet, GuessSet
- from lib import generate_coord
- game = Blueprint("game", __name__)
- def require_name():
- name = session.get("name", None)
- if name is None:
- abort(401)
- return name
- def require_game(game_id):
- g = Game.query.get(game_id)
- if g is None:
- abort(404)
- return g
- def new_coord_string():
- lat, lng = generate_coord(current_app.config["GOOGLE_API_KEY"])
- return f"{lat},{lng}"
- @game.route("", methods=["PUT"])
- def create_game():
- 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.query.get(game_id) is not None:
- # basically impossible collision, but let's be safe
- game_id = str(uuid.uuid4())
- cs = CoordSet(
- coord_1=new_coord_string(),
- coord_2=new_coord_string(),
- coord_3=new_coord_string(),
- coord_4=new_coord_string(),
- coord_5=new_coord_string()
- )
- 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()
- return jsonify({
- "gameId": game_id
- })
- @game.route("/<game_id>")
- def game_settings(game_id):
- g = require_game(game_id)
- return jsonify({
- "gameId": g.game_id,
- "creator": g.creator,
- "timer": g.timer,
- "coords": g.coord_set.to_dict(),
- "guesses": [], # TODO
- })
- @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/<round>", methods=["POST"])
- def make_guess(game_id, round):
- name = require_name()
- g = require_game(game_id)
- return "Unimplemented", 500 # TODO
|