From 78ac68cb2dca707f8a9e506fbf850c1efed83e38 Mon Sep 17 00:00:00 2001 From: Benjamin Ramhorst Date: Mon, 14 Feb 2022 21:14:22 +0000 Subject: [PATCH] =?UTF-8?q?Added=20functionality=20for=20reading=20last=20?= =?UTF-8?q?5=20step=20counts=C2=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/data.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/api/data.py b/api/data.py index e8b47f0..4b4fb50 100644 --- a/api/data.py +++ b/api/data.py @@ -1,5 +1,6 @@ import time import json +from datetime import datetime, time, timedelta from flask import Response, Blueprint, request from firebase_admin import firestore @@ -12,12 +13,14 @@ def uploadReadings(): resp = {'error': 'Device not specified'} return Response(json.dumps(resp), status=400, mimetype='application/json') + # Check that measurements are provided body = request.json if body is None: resp = {'error': 'Invalid request - please provide a body'} return Response(json.dumps(resp), status=400, mimetype='application/json') body['timestamp'] = time.time() + # Save all the measurements doc = firestore.client().collection(u'readings').document(deviceId).get() if doc.exists: list = doc.to_dict()['data'] @@ -25,9 +28,9 @@ def uploadReadings(): data = list else: data = [body] - upload = {'data': data} firestore.client().collection(u'readings').document(deviceId).set(upload) + resp = {'success': 'Data saved'} return Response(json.dumps(resp), status=200, mimetype='application/json') @@ -47,7 +50,7 @@ def getAllReadings(): results = {'data': data} return Response(json.dumps(results), status=200, mimetype='application/json') -@data.route('/readings/last/location', methods=['GET']) +@data.route('/readings/location/last', methods=['GET']) def getLastLocation(): deviceId = request.headers.get('deviceid') if deviceId is None: @@ -67,7 +70,7 @@ def getLastLocation(): results = {'latitude': lat, 'longitude': lon} return Response(json.dumps(results), status=200, mimetype='application/json') -@data.route('/readings/last/steps', methods=['GET']) +@data.route('/readings/steps/today', methods=['GET']) def getStepsToday(): deviceId = request.headers.get('deviceid') if deviceId is None: @@ -84,3 +87,35 @@ def getStepsToday(): results = {'cumulative_steps_today': steps} return Response(json.dumps(results), status=200, mimetype='application/json') + +@data.route('/readings/steps/last-five-days', methods=['GET']) +def getStepsLastFiveDays(): + deviceId = request.headers.get('deviceid') + if deviceId is None: + resp = {'error': 'Device not specified'} + return Response(json.dumps(resp), status=400, mimetype='application/json') + + upcomingMidnight = datetime.combine(datetime.today(), time.min) + timedelta(days=1) + doc = firestore.client().collection(u'readings').document(deviceId).get() + + if doc.exists: + data = doc.to_dict()['data'] + listOfDailySteps = [] + + for i in range(0, 5): + found = False + previousMidnight = upcomingMidnight - timedelta(days=1) + print(previousMidnight.timestamp()) + steps = 0 + for reading in reversed(data): + if reading['timestamp'] <= upcomingMidnight.timestamp() and reading['timestamp'] >= previousMidnight.timestamp() and not found: + steps = reading['cumulative_steps_today'] + found = True + listOfDailySteps.append(steps) + upcomingMidnight = previousMidnight + else: + listOfDailySteps = [0] * 5 + + results = {'daily_steps': listOfDailySteps} + return Response(json.dumps(results), status=200, mimetype='application/json') +