2022-02-07 13:54:40 +00:00
|
|
|
import time
|
|
|
|
import json
|
2022-02-07 13:45:10 +00:00
|
|
|
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:
|
2022-02-07 14:06:56 +00:00
|
|
|
resp = {'error': 'Device not specified'}
|
|
|
|
return Response(json.dumps(resp), status=400, mimetype='application/json')
|
2022-02-07 13:45:10 +00:00
|
|
|
|
|
|
|
body = request.json
|
|
|
|
if body is None:
|
2022-02-07 14:06:56 +00:00
|
|
|
resp = {'error': 'Invalid request - please provide a body'}
|
|
|
|
return Response(json.dumps(resp), status=400, mimetype='application/json')
|
2022-02-07 13:54:40 +00:00
|
|
|
body['timestamp'] = time.time()
|
2022-02-07 13:45:10 +00:00
|
|
|
|
|
|
|
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)
|
2022-02-07 14:06:56 +00:00
|
|
|
resp = {'success': 'Data saved'}
|
|
|
|
return Response(json.dumps(resp), status=200, mimetype='application/json')
|
2022-02-07 13:54:40 +00:00
|
|
|
|
|
|
|
@data.route('/readings/getall', methods=['GET'])
|
|
|
|
def getAllReadings():
|
|
|
|
deviceId = request.headers.get('deviceid')
|
|
|
|
if deviceId is None:
|
2022-02-07 14:06:56 +00:00
|
|
|
resp = {'error': 'Device not specified'}
|
|
|
|
return Response(json.dumps(resp), status=400, mimetype='application/json')
|
2022-02-07 13:54:40 +00:00
|
|
|
|
|
|
|
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')
|
2022-02-14 20:16:37 +00:00
|
|
|
|
|
|
|
@data.route('/readings/last/location', methods=['GET'])
|
|
|
|
def getLastLocation():
|
|
|
|
deviceId = request.headers.get('deviceid')
|
|
|
|
if deviceId is None:
|
|
|
|
resp = {'error': 'Device not specified'}
|
|
|
|
return Response(json.dumps(resp), status=400, mimetype='application/json')
|
|
|
|
|
|
|
|
doc = firestore.client().collection(u'readings').document(deviceId).get()
|
|
|
|
if doc.exists:
|
|
|
|
data = doc.to_dict()['data']
|
|
|
|
lastEntry = data[-1]
|
|
|
|
lat = lastEntry['latitude']
|
|
|
|
lon = lastEntry['longitude']
|
|
|
|
else:
|
|
|
|
lat = -1.0
|
|
|
|
lon = -1.0
|
|
|
|
|
|
|
|
results = {'latitude': lat, 'longitude': lon}
|
|
|
|
return Response(json.dumps(results), status=200, mimetype='application/json')
|
|
|
|
|
|
|
|
@data.route('/readings/last/steps', methods=['GET'])
|
|
|
|
def getStepsToday():
|
|
|
|
deviceId = request.headers.get('deviceid')
|
|
|
|
if deviceId is None:
|
|
|
|
resp = {'error': 'Device not specified'}
|
|
|
|
return Response(json.dumps(resp), status=400, mimetype='application/json')
|
|
|
|
|
|
|
|
doc = firestore.client().collection(u'readings').document(deviceId).get()
|
|
|
|
if doc.exists:
|
|
|
|
data = doc.to_dict()['data']
|
|
|
|
lastEntry = data[-1]
|
|
|
|
steps = lastEntry['cumulative_steps_today']
|
|
|
|
else:
|
|
|
|
steps = 0
|
|
|
|
|
|
|
|
results = {'cumulative_steps_today': steps}
|
|
|
|
return Response(json.dumps(results), status=200, mimetype='application/json')
|