diff --git a/src/logic/databaseNew/Crud.py b/src/logic/databaseNew/Crud.py index f2bcd6ae4546382cf7cf761352f4087be96e3afc..9dca2e4ff0fa757eec005529cc3381a18ed4e503 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 0ba15e2b0b5e0c74079349a76bac458ba4953dd9..272c3056972f75445c75ae79aee69932821b0d58 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)