From e7e15dd469c8f8ecaeb024503aa850514583e727 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 16 Jan 2021 18:07:50 +0100 Subject: [PATCH] added route to retrieve measurements of a specific sensor in a given time range --- src/logic/databaseNew/Crud.py | 9 +++++++++ src/routers/SensorRouter.py | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/logic/databaseNew/Crud.py b/src/logic/databaseNew/Crud.py index f2bcd6a..9dca2e4 100644 --- a/src/logic/databaseNew/Crud.py +++ b/src/logic/databaseNew/Crud.py @@ -74,6 +74,15 @@ def get_measurements(db: Session, startDateTime: str, endDateTime: str): return db.query(Models.Measurement).all() +def get_measurements_for_sensor(db: Session, startDateTime: str, endDateTime: str, sensorId: int): + if startDateTime and endDateTime: + return db.query(Models.Measurement).filter(and_(startDateTime <= Models.Measurement.timestamp, + endDateTime >= Models.Measurement.timestamp, + Models.Measurement.sensorId == sensorId)).all() + + return db.query(Models.Measurement).filter(Models.Measurement.sensorId == sensorId).all() + + def get_measurement(db: Session, measurementId: int): return db.query(Models.Measurement).filter(Models.Measurement.id == measurementId).first() diff --git a/src/routers/SensorRouter.py b/src/routers/SensorRouter.py index 0ba15e2..272c305 100644 --- a/src/routers/SensorRouter.py +++ b/src/routers/SensorRouter.py @@ -3,7 +3,7 @@ from typing import List from fastapi import APIRouter, HTTPException, Depends from sqlalchemy.orm import Session -from Dependencies import get_database, check_api_key +from Dependencies import get_database, check_api_key, START_DATE_TIME, END_DATE_TIME from logic.databaseNew import Schemas, Crud from logic.databaseNew.Schemas import Status @@ -61,3 +61,17 @@ async def delete_sensor(sensorId: int, db: Session = Depends(get_database)): Crud.delete_sensor(db, sensor) return Status(message=f'Deleted sensor {sensor.id}') + + +@router.get('/{sensorId}/measurements', response_model=List[Schemas.Measurement], + summary='Gets all measurements for a specific sensor', + description='Number of results can be limited by specifying a date range', + responses={404: {'description': 'Sensor not found'}}) +async def get_sensor_measurements(sensorId: int, + startDateTime: str = START_DATE_TIME, + endDateTime: str = END_DATE_TIME, + db: Session = Depends(get_database)): + sensor = Crud.get_sensor(db, sensorId=sensorId) + if sensor is None: + raise HTTPException(status_code=404, detail='Sensor not found') + return Crud.get_measurements_for_sensor(db, startDateTime, endDateTime, sensorId) -- GitLab