From 6af73ccace93e55107deddf74605c4d936524863 Mon Sep 17 00:00:00 2001
From: Nils G <nils.gondermann@ruhr-uni-bochum.de>
Date: Thu, 16 Apr 2020 12:46:36 +0200
Subject: [PATCH] Initial creation of API /game/start

---
 controllers/game.py | 34 ++++++++++++++++++++++++++++++++++
 controllers/room.py | 10 ++++------
 models/f_room.py    |  2 ++
 3 files changed, 40 insertions(+), 6 deletions(-)
 create mode 100644 controllers/game.py

diff --git a/controllers/game.py b/controllers/game.py
new file mode 100644
index 0000000..3ca1e33
--- /dev/null
+++ b/controllers/game.py
@@ -0,0 +1,34 @@
+from parameter_util import JSON_BODY, JSON_CONTAINS
+from http_util import FAIL, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_CONFLICT
+from room_util import ROOM_GET
+
+import json
+
+def start():
+    parameters = JSON_BODY(request)
+
+    if parameters == None:
+        return(FAIL(CODE_JSON))
+
+    if not JSON_CONTAINS(parameters, [('room_id', int), ('room_pw', str), ('roles', dict)]):
+        return(FAIL(CODE_MISSING))
+
+    room_id = parameters['room_id']
+    room_pw = parameters['room_pw']
+    roles = parameters['roles']
+
+    room_record = ROOM_GET(room_id, room_pw)
+
+    if not room_record:
+        return(FAIL(CODE_SEMANTIC))
+
+    if room_record.started:
+        return(FAIL(CODE_CONFLICT))
+
+    if room_record.closed:
+        return(FAIL(CODE_GONE))
+
+    db(db.Room.id == room_record.id).update(started=True, roles=json.dumps(roles))
+
+    json_response = {"status": "success"}
+    return(response.json(json_response))
diff --git a/controllers/room.py b/controllers/room.py
index 5747644..6a9c9aa 100644
--- a/controllers/room.py
+++ b/controllers/room.py
@@ -21,9 +21,8 @@ def create():
     room_id = db.Room.insert(player_max=player_max)
     room_record = db(db.Room.id == room_id).select().first()
 
-    json = {"room_id": room_id, "room_code": room_record.code, "room_pw": room_record.hashcode}
-
-    return(response.json(json))
+    json_response = {"room_id": room_id, "room_code": room_record.code, "room_pw": room_record.hashcode}
+    return(response.json(json_response))
 
 
 def status():
@@ -48,6 +47,5 @@ def status():
 
     players = PLAYERS_GET(room_record)
 
-    json = {"players": players}
-
-    return(response.json(json))
+    json_response = {"players": players}
+    return(response.json(json_response))
diff --git a/models/f_room.py b/models/f_room.py
index 6ac77f6..fb6f7d3 100644
--- a/models/f_room.py
+++ b/models/f_room.py
@@ -8,6 +8,8 @@ db.define_table(
     Field('player_max', 'integer', notnull=True),
     Field('creation', 'datetime', default=request.now, notnull=True),
     Field('heartbeat', 'datetime', default=request.now, notnull=True),
+    Field('started', 'boolean', default=False),
+    Field('roles', 'string', default="", notnull=True),
     Field('closed', 'boolean', default=False)
 )
 
-- 
GitLab