diff --git a/api/data.py b/api/data.py index e69de29..879f5ef 100644 --- a/api/data.py +++ b/api/data.py @@ -0,0 +1,45 @@ +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']) +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'] = time.time() + + 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') + +@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') 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