From 4ddd55f19be1c419ba10d292c44dbc95f258d4da Mon Sep 17 00:00:00 2001
From: Nils G <nils.gondermann@ruhr-uni-bochum.de>
Date: Tue, 7 Apr 2020 15:15:56 +0200
Subject: [PATCH] Added Player table and read it in the /room/status API

---
 controllers/room.py  |  5 +++--
 models/i_players.py  | 16 ++++++++++++++++
 modules/room_util.py | 12 ++++++++++++
 3 files changed, 31 insertions(+), 2 deletions(-)
 create mode 100644 models/i_players.py

diff --git a/controllers/room.py b/controllers/room.py
index b981fbd..6e2cfc8 100644
--- a/controllers/room.py
+++ b/controllers/room.py
@@ -1,6 +1,6 @@
 from parameter_util import JSON_BODY, JSON_CONTAINS
 from http_util import FAIL, CODE_JSON, CODE_MISSING, CODE_SEMANTIC
-from room_util import ROOM_GET
+from room_util import ROOM_GET, PLAYERS_GET
 
 import random
 
@@ -43,7 +43,8 @@ def status():
     if not room_record:
         return(FAIL(CODE_SEMANTIC))
 
+    players = PLAYERS_GET(room_record)
 
-    json = {"players": []}
+    json = {"players": players}
 
     return(response.json(json))
diff --git a/models/i_players.py b/models/i_players.py
new file mode 100644
index 0000000..f9af041
--- /dev/null
+++ b/models/i_players.py
@@ -0,0 +1,16 @@
+db.define_table(
+    'Player',
+    Field('room_id', db.Room, notnull=True),
+    Field('hashcode', 'string', notnull=True),
+    Field('name', 'string', notnull=True),
+    Field('role', 'string', default="idle"),
+    Field('creation', 'datetime', default=request.now, notnull=True)
+)
+
+def generateHashCode():
+    digest = blake2b(digest_size=32)
+    digest.update(str(request.now).encode("utf-8"))
+    digest.update(str(random.random()).encode("utf-8"))
+    return (digest.hexdigest())
+
+db.Player.hashcode.default = generateHashCode
diff --git a/modules/room_util.py b/modules/room_util.py
index c9eb7ba..13290b8 100644
--- a/modules/room_util.py
+++ b/modules/room_util.py
@@ -10,3 +10,15 @@ def ROOM_GET(_id, _password):
         return(None)
 
     return(room_record)
+
+
+def PLAYERS_GET(_room):
+    rows = current.db(current.db.Player.room_id == _room.id).select(orderby=current.db.Player.id)
+
+    players = []
+    player_id = 0
+    for row in rows:
+        players.append({"id": player_id, "name": row.name, "role": row.role})
+        player_id = player_id + 1
+
+    return(players)
-- 
GitLab