From 0fbfa42a0ee45f44b1346eac145aa26e24fc80f6 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 25 Sep 2020 12:45:37 +0200
Subject: [PATCH] #delete route for measurement

---
 docs/api.yml                            | 27 +++++++++++++++++++++++++
 src/blueprints/Measurements.py          | 10 +++++++++
 src/logic/database/MeasurementAccess.py |  5 +++++
 3 files changed, 42 insertions(+)

diff --git a/docs/api.yml b/docs/api.yml
index 38b4854..4d8a12f 100644
--- a/docs/api.yml
+++ b/docs/api.yml
@@ -219,6 +219,33 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/Measurement'
+    delete:
+      tags:
+        - measurement
+      summary: Deletes a specific measurement
+      operationId: deleteMeasurement
+      security:
+        - bearerAuth: []
+      parameters:
+        - in: path
+          name: measurementID
+          description: The measurement 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'
 
 components:
   securitySchemes:
diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py
index 932d9fa..536b8ee 100644
--- a/src/blueprints/Measurements.py
+++ b/src/blueprints/Measurements.py
@@ -56,4 +56,14 @@ def construct_blueprint(settings):
         database.sensorAccess.add_sensor(deviceID, sensorName, sensorType)
         return database.sensorAccess.get_sensor_by_name_and_device_id(deviceID, sensorName)
 
+    @measurements.route('/measurement/<int:measurementID>', methods=['DELETE'])
+    @require_api_key(password=settings['api']['key'])
+    def delete_measurement(measurementID):
+        database = Database(settings['database']['databasePath'])
+        if not database.measurementAccess.get_measurement(measurementID):
+            return jsonify({'success': False, 'msg': f'No measurement with id "{measurementID}" existing'})
+
+        database.measurementAccess.delete_measurement(measurementID)
+        return jsonify({'success': True})
+
     return measurements
diff --git a/src/logic/database/MeasurementAccess.py b/src/logic/database/MeasurementAccess.py
index 0ff97c5..e617b0f 100644
--- a/src/logic/database/MeasurementAccess.py
+++ b/src/logic/database/MeasurementAccess.py
@@ -48,3 +48,8 @@ class MeasurementAccess(DatabaseAccess):
         self._query(f'INSERT INTO {self.TABLE_NAME}(sensor_id, value, timestamp ) VALUES(?, ?, ?)',
                     sensorID, value, self.__get_current_datetime(),
                     fetch_type=FetchType.NONE)
+
+    def delete_measurement(self, measurementID: int):
+        LOGGER.debug(f'Deleting measurement "{measurementID}"')
+        self._query(f'DELETE FROM {self.TABLE_NAME} WHERE id = ?', measurementID, fetch_type=FetchType.NONE)
+
-- 
GitLab