game_api.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from functools import wraps
  2. import uuid
  3. from flask import Blueprint, session, abort, request, current_app, jsonify
  4. from db import db, Game
  5. from lib import generate_coord
  6. game = Blueprint("game", __name__)
  7. def require_name():
  8. name = session.get("name", None)
  9. if name is None:
  10. abort(401)
  11. return name
  12. def require_game(game_id):
  13. g = Game.get(game_id)
  14. if g is None:
  15. abort(404)
  16. return g
  17. @game.route("", methods=["PUT"])
  18. def create_game():
  19. name = require_name()
  20. timer = request.json.get("timer", None)
  21. if not isinstance(timer, int) or timer <= 0:
  22. abort(400)
  23. game_id = str(uuid.uuid4())
  24. while Game.get(game_id) is not None:
  25. # basically impossible collision, but let's be safe
  26. game_id = str(uuid.uuid4())
  27. coords = [generate_coord(current_app.config["GOOGLE_API_KEY"]) for _ in range(5)]
  28. print(coords) # TODO
  29. new_game = Game(
  30. game_id=game_id,
  31. timer=timer,
  32. creator=name
  33. )
  34. db.session.add(new_game)
  35. db.session.commit()
  36. return jsonify({
  37. "gameId": game_id
  38. })
  39. @game.route("/<game_id>")
  40. def game_settings(game_id):
  41. g = require_game(game_id)
  42. return jsonify({
  43. "gameId": g.game_id,
  44. "creator": g.creator,
  45. "timer": g.timer,
  46. "coords": {}, # TODO
  47. "guesses": [], # TODO
  48. })
  49. @game.route("/<game_id>/guesses")
  50. def guesses(game_id):
  51. name = require_name()
  52. g = require_game(game_id)
  53. return "Unimplemented", 500 # TODO
  54. @game.route("/<game_id>/guesses/<round>", methods=["POST"])
  55. def make_guess(game_id, round):
  56. name = require_name()
  57. g = require_game(game_id)
  58. return "Unimplemented", 500 # TODO