diff --git a/docs/api.yml b/docs/api.yml index a9aac3f46b903e211cb2f4669cf2f33afffdc6bc..e835c627acde04a78bdc50cfc3d775bc0b97c3f0 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 4b8520da1b49596b2447816144547fa42c0b01d4..c2088ba31ad7a20f5424f2016f0bd668ffbe7cd1 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 f42517e0c0be6baed34d19a73f385b141b0a41f5..b2ebc14efe3d12c0b043a13079fa2014a8a0e8f0 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)