From f6ab5b72c59c7d8cca5eff773d10b2b28afc1a03 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Fri, 25 Sep 2020 12:58:21 +0200 Subject: [PATCH] delete route for device --- docs/api.yml | 27 +++++++++++++++++++++++++++ src/blueprints/Devices.py | 17 +++++++++++++++++ src/logic/database/DeviceAccess.py | 4 ++++ 3 files changed, 48 insertions(+) diff --git a/docs/api.yml b/docs/api.yml index a9aac3f..e835c62 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -54,6 +54,33 @@ paths: application/json: schema: $ref: '#/components/schemas/Device' + delete: + tags: + - device + summary: Deletes a specific device. All correspondig sensors and measurements will be deleted too. + operationId: deleteDevice + security: + - bearerAuth: [] + parameters: + - in: path + name: deviceID + description: The device id + required: true + schema: + type: integer + responses: + '200': + description: success response + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + default: + description: error response + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' /device/{deviceID}/sensors: get: tags: diff --git a/src/blueprints/Devices.py b/src/blueprints/Devices.py index 4b8520d..c2088ba 100644 --- a/src/blueprints/Devices.py +++ b/src/blueprints/Devices.py @@ -1,5 +1,6 @@ from flask import Blueprint, jsonify +from logic.AuthenticationWrapper import require_api_key from logic.database.Database import Database @@ -25,4 +26,20 @@ def construct_blueprint(settings): return jsonify(database.sensorAccess.get_all_sensors_for_device(deviceID)) + @devices.route('/device/<int:deviceID>', methods=['DELETE']) + @require_api_key(password=settings['api']['key']) + def delete_device(deviceID): + database = Database(settings['database']['databasePath']) + if not database.deviceAccess.get_device(deviceID): + return jsonify({'success': False, 'msg': f'No device with id "{deviceID}" existing'}) + + sensors = database.sensorAccess.get_all_sensors_for_device(deviceID) + for sensor in sensors: + database.measurementAccess.delete_measurements_for_sensor(sensor['id']) + database.sensorAccess.delete_sensor(sensor['id']) + + database.deviceAccess.delete_device(deviceID) + + return jsonify({'success': True}) + return devices diff --git a/src/logic/database/DeviceAccess.py b/src/logic/database/DeviceAccess.py index f42517e..b2ebc14 100644 --- a/src/logic/database/DeviceAccess.py +++ b/src/logic/database/DeviceAccess.py @@ -28,3 +28,7 @@ class DeviceAccess(DatabaseAccess): def add_device(self, deviceName: str): LOGGER.debug(f'Inserting new device "{deviceName}"') self._query(f'INSERT INTO {self.TABLE_NAME}(name) VALUES(?)', deviceName, fetch_type=FetchType.NONE) + + def delete_device(self, deviceID: int): + LOGGER.debug(f'Deleting device "{deviceID}"') + self._query(f'DELETE FROM {self.TABLE_NAME} WHERE id = ?', deviceID, fetch_type=FetchType.NONE) -- GitLab