diff --git a/src/logic/databaseNew/Schemas.py b/src/logic/databaseNew/Schemas.py index 3075ae39eafc80bd3b51ef42fddbcbdf58a57a1b..e42c49a4a963ae638eea7a898387ed3aa70ff495 100644 --- a/src/logic/databaseNew/Schemas.py +++ b/src/logic/databaseNew/Schemas.py @@ -66,3 +66,16 @@ class Device(BaseModel): class DeviceCreate(BaseModel): name: str + + +# ===== send multiple measurements ===== + +class SensorValue(BaseModel): + name: str + type: str + value: str + + +class MultipleMeasurements(BaseModel): + deviceName: str + sensors: List[SensorValue] diff --git a/src/routers/MeasurementRouter.py b/src/routers/MeasurementRouter.py index 9905b1a0cb1c082eb3c78ceacc881643afa492d3..6684d1fb0829ea29b25728048b6d019d896ec27c 100644 --- a/src/routers/MeasurementRouter.py +++ b/src/routers/MeasurementRouter.py @@ -71,3 +71,24 @@ async def get_min_and_max_for_sensor_ids(sensorIds: List[int] = Query(None), return MinMax(min=min(values), max=max(values)) return MinMax(min=None, max=None) + + +@router.post('/measurements/', response_model=Schemas.Status, + summary='Adds multiple measurements', + description='Non-existent device and sensors will be created automatically', + dependencies=[Depends(check_api_key)]) +async def create_multiple_measurements(measurementsToAdd: Schemas.MultipleMeasurements, + db: Session = Depends(get_database)): + existingDevice = Crud.get_device_by_name(db, measurementsToAdd.deviceName) + if not existingDevice: + existingDevice = Crud.create_device(db, Schemas.DeviceCreate(name=measurementsToAdd.deviceName)) + + for sensor in measurementsToAdd.sensors: + existingSensor = Crud.get_sensor_by_name_and_device_id(db, sensor.name, existingDevice.id) + if not existingSensor: + existingSensor = Crud.create_sensor(db, Schemas.SensorCreate(name=sensor.name, + type=sensor.type, + devideId=existingDevice.id)) + Crud.create_measurement(db, Schemas.MeasurementCreate(value=sensor.value, sensorId=existingSensor.id)) + + return Status(message=f'Success')