From e0f2f18bd23494be0148fa37d6805c9fcee90704 Mon Sep 17 00:00:00 2001 From: Benjamin Ramhorst Date: Mon, 7 Feb 2022 13:45:10 +0000 Subject: [PATCH 1/2] Added endpoints for saving measurements --- api/data.py | 28 ++++++++++++++++++++++++++++ main.py | 3 +++ 2 files changed, 31 insertions(+) diff --git a/api/data.py b/api/data.py index e69de29..978c993 100644 --- a/api/data.py +++ b/api/data.py @@ -0,0 +1,28 @@ +import datetime +from flask import Response, Blueprint, request +from firebase_admin import firestore + +data = Blueprint('data', __name__) + +@data.route('/readings/save', methods=['POST']) +def uploadReadings(): + deviceId = request.headers.get('deviceid') + if deviceId is None: + return Response("{'error':'Device not specified'}", status=400, mimetype='application/json') + + body = request.json + if body is None: + return Response("{'error':'Invalid request - please provide a body'}", status=400, mimetype='application/json') + body['timestamp'] = datetime.datetime.now() + + doc = firestore.client().collection(u'readings').document(deviceId).get() + if doc.exists: + list = doc.to_dict()['data'] + list.append(body) + data = list + else: + data = [body] + + upload = {'data': data} + firestore.client().collection(u'readings').document(deviceId).set(upload) + return Response("{'success':'Data saved'}", status=200, mimetype='application/json') diff --git a/main.py b/main.py index e12d427..fc5d5fb 100644 --- a/main.py +++ b/main.py @@ -2,10 +2,13 @@ from config.variables import MAIL_SERVER, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWOR from flask import Flask from firebase_admin import credentials, initialize_app from api.authentication import authentication +from api.data import data # Initialize Flask app and register all the endpoints app = Flask(__name__) app.register_blueprint(authentication) +app.register_blueprint(data) + # Initialize Mail instance app.config['MAIL_SERVER'] = MAIL_SERVER From 2fa0e252f8c19129d06313d24198aa0c47537a41 Mon Sep 17 00:00:00 2001 From: Benjamin Ramhorst Date: Mon, 7 Feb 2022 13:54:40 +0000 Subject: [PATCH 2/2] Added endpoints for retrieving device data --- api/data.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/api/data.py b/api/data.py index 978c993..879f5ef 100644 --- a/api/data.py +++ b/api/data.py @@ -1,7 +1,9 @@ -import datetime +import time +import json from flask import Response, Blueprint, request from firebase_admin import firestore + data = Blueprint('data', __name__) @data.route('/readings/save', methods=['POST']) @@ -13,7 +15,7 @@ def uploadReadings(): body = request.json if body is None: return Response("{'error':'Invalid request - please provide a body'}", status=400, mimetype='application/json') - body['timestamp'] = datetime.datetime.now() + body['timestamp'] = time.time() doc = firestore.client().collection(u'readings').document(deviceId).get() if doc.exists: @@ -26,3 +28,18 @@ def uploadReadings(): upload = {'data': data} firestore.client().collection(u'readings').document(deviceId).set(upload) return Response("{'success':'Data saved'}", status=200, mimetype='application/json') + +@data.route('/readings/getall', methods=['GET']) +def getAllReadings(): + deviceId = request.headers.get('deviceid') + if deviceId is None: + return Response("{'error':'Device not specified'}", status=400, mimetype='application/json') + + doc = firestore.client().collection(u'readings').document(deviceId).get() + if doc.exists: + data = doc.to_dict()['data'] + else: + data = [] + + results = {'data': data} + return Response(json.dumps(results), status=200, mimetype='application/json')