From e85553284e2416f13e0397505e58e5eb8fb4801f Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 16 Jan 2021 17:55:32 +0100 Subject: [PATCH] allow to specify a date range when fetching all measurements --- src/logic/databaseNew/Crud.py | 9 +++++++-- src/routers/MeasurementRouter.py | 14 ++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/logic/databaseNew/Crud.py b/src/logic/databaseNew/Crud.py index ae4f2d6..f2bcd6a 100644 --- a/src/logic/databaseNew/Crud.py +++ b/src/logic/databaseNew/Crud.py @@ -1,5 +1,6 @@ from datetime import datetime +from sqlalchemy import and_ from sqlalchemy.orm import Session from logic.databaseNew import Models, Schemas @@ -65,8 +66,12 @@ def delete_sensor(db: Session, sensor: Schemas.Sensor): # ===== measurements ===== -def get_measurements(db: Session, skip: int = 0, limit: int = 100): - return db.query(Models.Measurement).offset(skip).limit(limit).all() +def get_measurements(db: Session, startDateTime: str, endDateTime: str): + if startDateTime and endDateTime: + return db.query(Models.Measurement).filter(and_(startDateTime <= Models.Measurement.timestamp, + endDateTime >= Models.Measurement.timestamp)).all() + + return db.query(Models.Measurement).all() def get_measurement(db: Session, measurementId: int): diff --git a/src/routers/MeasurementRouter.py b/src/routers/MeasurementRouter.py index 6b96151..ad83be2 100644 --- a/src/routers/MeasurementRouter.py +++ b/src/routers/MeasurementRouter.py @@ -1,6 +1,6 @@ from typing import List -from fastapi import APIRouter, HTTPException, Depends +from fastapi import APIRouter, HTTPException, Depends, Query from sqlalchemy.orm import Session from Dependencies import get_database, check_api_key @@ -14,9 +14,15 @@ router = APIRouter( @router.get('/', response_model=List[Schemas.Measurement], - summary='Gets all measurements') -async def read_measurements(skip: int = 0, limit: int = 100, db: Session = Depends(get_database)): - return Crud.get_measurements(db, skip=skip, limit=limit) + summary='Gets all measurements (Number of results can be limited by specifying a date range).') +async def read_measurements(startDateTime: str = Query('2020-01-20 18:15:22', + description='The start date and time of the date range ' + 'that should be taken into account.'), + endDateTime: str = Query('2020-01-20 19:15:22', + description='The end date and time of the date range ' + 'that should be taken into account.'), + db: Session = Depends(get_database)): + return Crud.get_measurements(db, startDateTime=startDateTime, endDateTime=endDateTime) @router.get('/{measurementId}', response_model=Schemas.Measurement, -- GitLab