diff --git a/src/logic/database/Crud.py b/src/logic/database/Crud.py index 052f85d8609cd1d71d02da59ba50bbdae6b0f272..5c8ffb726f9e73a76d750daea9eef57d148def21 100644 --- a/src/logic/database/Crud.py +++ b/src/logic/database/Crud.py @@ -31,7 +31,7 @@ def get_devices(db: Session, skip: int = 0, limit: int = 100): return db.query(Models.Device).offset(skip).limit(limit).all() -def get_device(db: Session, deviceId: int): +def get_device(db: Session, deviceId: int) -> Models.Device: return db.query(Models.Device).filter(Models.Device.id == deviceId).first() @@ -48,6 +48,15 @@ def create_device(db: Session, device: Schemas.DeviceCreate): return dbDevice +@notify_backup_service(BACKUP_SERVICE) +def update_device(db: Session, deviceId: int, device: Schemas.DeviceCreate): + existingDevice = get_device(db, deviceId) + existingDevice.name = device.name + db.commit() + db.refresh(existingDevice) + return existingDevice + + @notify_backup_service(BACKUP_SERVICE) def delete_device(db: Session, device: Schemas.Device): db.delete(device) diff --git a/src/logic/routers/DeviceRouter.py b/src/logic/routers/DeviceRouter.py index 74a3bf73f5a80e6aceb7d91395b24def8faa056e..1d384f9e30b1556b7adfc49f32f2fa77525ca0da 100644 --- a/src/logic/routers/DeviceRouter.py +++ b/src/logic/routers/DeviceRouter.py @@ -40,6 +40,17 @@ async def create_device(device: Schemas.DeviceCreate, db: Session = Depends(get_ return Crud.create_device(db=db, device=device) +@router.put('/{deviceId}', response_model=Schemas.Device, + summary='Updates a device', + responses={404: {'description': 'Device not found'}}, + dependencies=[Depends(check_api_key)]) +async def update_device(deviceId: int, device: Schemas.DeviceCreate, db: Session = Depends(get_database)): + createdDevice = Crud.get_device_by_name(db, device.name) + if createdDevice: + raise HTTPException(status_code=404, detail='Device not found') + return Crud.update_device(db=db, deviceId=deviceId, device=device) + + @router.delete('/{deviceId}', response_model=Status, summary='Deletes a specific device', description='All corresponding sensors and measurements will be deleted too.',