From bd31e427158bc8a25519c26e7f1226cf16dd974c Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 16 Jan 2021 23:00:12 +0100 Subject: [PATCH] added route to update sensor name and type --- src/logic/database/Crud.py | 10 ++++++++++ src/logic/database/Schemas.py | 5 +++++ src/logic/routers/SensorRouter.py | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/logic/database/Crud.py b/src/logic/database/Crud.py index 5c8ffb7..6b765ad 100644 --- a/src/logic/database/Crud.py +++ b/src/logic/database/Crud.py @@ -87,6 +87,16 @@ def create_sensor(db: Session, sensor: Schemas.SensorCreate): return dbSensor +@notify_backup_service(BACKUP_SERVICE) +def update_sensor(db: Session, sensorId: int, sensor: Schemas.SensorUpdate): + existingSensor = get_sensor(db, sensorId) + existingSensor.name = sensor.name + existingSensor.type = sensor.type + db.commit() + db.refresh(existingSensor) + return existingSensor + + @notify_backup_service(BACKUP_SERVICE) def delete_sensor(db: Session, sensor: Schemas.Sensor): db.delete(sensor) diff --git a/src/logic/database/Schemas.py b/src/logic/database/Schemas.py index 4a535eb..7008268 100644 --- a/src/logic/database/Schemas.py +++ b/src/logic/database/Schemas.py @@ -61,6 +61,11 @@ class SensorCreate(BaseModel): deviceId: int +class SensorUpdate(BaseModel): + name: str + type: str + + class Sensor(SensorBase): id: int name: str diff --git a/src/logic/routers/SensorRouter.py b/src/logic/routers/SensorRouter.py index f5ba3ba..e408d37 100644 --- a/src/logic/routers/SensorRouter.py +++ b/src/logic/routers/SensorRouter.py @@ -49,6 +49,25 @@ async def create_sensor(sensor: Schemas.SensorCreate, db: Session = Depends(get_ return Crud.create_sensor(db=db, sensor=sensor) +@router.put('/{sensorId}', response_model=Schemas.Sensor, + summary='Updates a sensor', + responses={404: {'description': 'Sensor not found'}}, + dependencies=[Depends(check_api_key)]) +async def update_device(sensorId: int, sensor: Schemas.SensorUpdate, db: Session = Depends(get_database)): + sensorToUpdate = Crud.get_sensor(db, sensorId) + if not sensorToUpdate: + raise HTTPException(status_code=404, detail='Sensor not found') + + if sensorToUpdate.name != sensor.name: + existingSensor = Crud.get_sensor_by_name_and_device_id(db, sensor.name, sensorToUpdate.deviceId) + if existingSensor: + raise HTTPException(status_code=400, + detail=f'A sensor called "{sensor.name}" already exists ' + f'(ID: {existingSensor.id}) for device {sensorToUpdate.deviceId}') + + return Crud.update_sensor(db=db, sensorId=sensorId, sensor=sensor) + + @router.delete('/{sensorId}', response_model=Status, summary='Deletes a specific sensor', description='All corresponding measurements will be deleted too.', -- GitLab