From 013e04d96a1223b0d11a8c4688b1b855c3243f05 Mon Sep 17 00:00:00 2001 From: Anton Franzluebbers Date: Tue, 19 Oct 2021 22:52:16 -0400 Subject: [PATCH] update db schema and new routes --- CreateDB.sql | 15 ++++++++-- velconnect/routes/api.py | 62 ++++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/CreateDB.sql b/CreateDB.sql index 0855704..a8aa40b 100644 --- a/CreateDB.sql +++ b/CreateDB.sql @@ -7,7 +7,11 @@ CREATE TABLE `Room` ( `owner` VARCHAR(64), -- array of hw_ids of users allowed. Always includes the owner. Null for public `whitelist` JSON, - CHECK (JSON_VALID(`whitelist`)) + CHECK (JSON_VALID(`whitelist`)), + `tv_url` VARCHAR(1024), + `carpet_color` VARCHAR(8), + `room_details` JSON, + CHECK (JSON_VALID(`room_details`)) ); DROP TABLE IF EXISTS `Headset`; CREATE TABLE `Headset` ( @@ -16,11 +20,16 @@ CREATE TABLE `Headset` ( `owned_room` VARCHAR(64), -- The room_id of the current room. Can be null if room not specified `current_room` VARCHAR(64), - -- changes relatively often + -- changes relatively often. Generated by the headset `pairing_code` INT, `date_created` TIMESTAMP DEFAULT CURRENT_TIME, -- the last time this headset was actually seen - `last_used` TIMESTAMP DEFAULT CURRENT_TIME + `last_used` TIMESTAMP DEFAULT CURRENT_TIME, + `user_color` VARCHAR(8), + `user_name` VARCHAR(64), + -- Stuff like player color, nickname, whiteboard state + `user_details` JSON, + CHECK (JSON_VALID(`user_details`)) ); DROP TABLE IF EXISTS `APIKey`; CREATE TABLE `APIKey` ( diff --git a/velconnect/routes/api.py b/velconnect/routes/api.py index f417275..d5d4de5 100644 --- a/velconnect/routes/api.py +++ b/velconnect/routes/api.py @@ -88,11 +88,11 @@ def update_paring_code(): @bp.route('/get_headset_details/', methods=['GET']) @require_api_key(10) def get_headset_details(hw_id): - values = get_headset_details_db(hw_id) - if len(values) == 1: - return jsonify(values[0]) - else: + data = get_headset_details_db(hw_id) + if data is None: return jsonify({'error': "Can't find headset with that id."}), 400 + else: + return jsonify(data) def get_headset_details_db(hw_id): @@ -101,9 +101,14 @@ def get_headset_details_db(hw_id): SELECT * FROM `Headset` WHERE `hw_id`=%(hw_id)s; """ curr.execute(query, {'hw_id': hw_id}) - values = [dict(row) for row in curr.fetchall()] + headsets = [dict(row) for row in curr.fetchall()] curr.close() - return values + if len(headsets) == 0: + return None + + room = get_room_details_db(headsets[0]['current_room']) + + return {'user': headsets[0], 'room': room} @bp.route('/set_headset_details/', methods=['POST']) @@ -117,7 +122,9 @@ def set_headset_details_db(hw_id, data): conn, curr = connectToDB() query = """ UPDATE `Headset` - SET `current_room` = %(current_room)s + SET `current_room` = %(current_room)s, + `user_color` = %(user_color)s, + `user_name` = %(user_name)s WHERE `hw_id` = %(hw_id)s; """ data['hw_id'] = hw_id @@ -141,7 +148,10 @@ def get_room_details_db(room_id): curr.execute(query, {'room_id': room_id}) values = [dict(row) for row in curr.fetchall()] curr.close() - return jsonify(values) + if len(values) == 1: + return values[0] + else: + return None @bp.route('/set_room_details/', methods=['POST']) @@ -161,4 +171,38 @@ def set_room_details_db(room_id, data): curr.execute(query, {'room_id': room_id}) conn.commit() curr.close() - return jsonify({'room_id': room_id}) + return {'room_id': room_id} + + +@bp.route('/set_room_details//tv_url', methods=['POST']) +@require_api_key(10) +def set_room_details_tv_url(room_id): + conn, curr = connectToDB() + query = """ + UPDATE `Room` + SET `tv_url` = %(tv_url)s + WHERE `room_id` = %(room_id)s; + """ + data = request.json + data['room_id'] = room_id + curr.execute(query, data) + conn.commit() + curr.close() + return {'room_id': room_id} + + +@bp.route('/set_room_details//carpet_color', methods=['POST']) +@require_api_key(10) +def set_room_details_carpet_color(room_id): + conn, curr = connectToDB() + query = """ + UPDATE `Room` + SET `tv_url` = %(tv_url)s + WHERE `carpet_color` = %(carpet_color)s; + """ + data = request.json + data['room_id'] = room_id + curr.execute(query, data) + conn.commit() + curr.close() + return {'room_id': room_id}