From 2c747d7664a857d1f14d65cc53992177b0eac80e Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 23 Sep 2020 21:34:35 +0200
Subject: [PATCH] document post measurement route

---
 docs/api.yml             | 56 ++++++++++++++++++++++++++++++++++++++++
 src/blueprints/Routes.py | 46 +++++++++++++++++----------------
 2 files changed, 80 insertions(+), 22 deletions(-)

diff --git a/docs/api.yml b/docs/api.yml
index 501a1df..478eb8c 100644
--- a/docs/api.yml
+++ b/docs/api.yml
@@ -136,6 +136,29 @@ paths:
                 type: array
                 items:
                   $ref: '#/components/schemas/Measurement'
+    post:
+      summary: Adds a new measurement
+      operationId: addMeasurement
+      requestBody:
+        description: Measurement to add
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/NewDeviceMeasurement'
+      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'
   /measurement/{measurementID}:
     get:
       summary: Gets a specific measurement
@@ -231,6 +254,39 @@ components:
           format: date-time
           example: "2020-09-23 20:58:00"
 
+    NewDeviceMeasurement:
+      type: object
+      required:
+        - device
+        - sensors
+      properties:
+        device:
+          type: string
+          example: "myDevice"
+        sensors:
+          type: array
+          items:
+            allOf:
+              - $ref: '#/components/schemas/NewMeasurement'
+              - type: object
+
+    NewMeasurement:
+      type: object
+      required:
+        - name
+        - type
+        - value
+      properties:
+        name:
+          type: string
+          example: "mySensor"
+        type:
+          type: string
+          example: "temperature"
+        value:
+          type: string
+          example: "20.15"
+
     SuccessResponse:
       required:
         - success
diff --git a/src/blueprints/Routes.py b/src/blueprints/Routes.py
index eb78369..fe334f8 100644
--- a/src/blueprints/Routes.py
+++ b/src/blueprints/Routes.py
@@ -12,6 +12,7 @@ from logic.RequestValidator import ValidationError, RequestValidator
 
 
 class DeviceParameters(Enum):
+    DEVICE = 'device'
     SENSORS = 'sensors'
 
     @staticmethod
@@ -75,12 +76,32 @@ def construct_blueprint(settings, version):
 
         return jsonify(database.get_all_sensors_for_device(deviceID))
 
-    @routes.route('/device/<deviceName>', methods=['POST'])
-    def postSensorData(deviceName):
+    @routes.route('/measurements', methods=['GET'])
+    def get_all_measurements():
+        database = Database(settings['database']['databasePath'])
+        return jsonify(database.get_all_measurements())
+
+    @routes.route('/measurement/<int:measurementID>', methods=['GET'])
+    def get_measurement(measurementID):
+        database = Database(settings['database']['databasePath'])
+        return jsonify(database.get_measurement(measurementID))
+
+    @routes.route('/sensor/<sensorID>/measurements', methods=['GET'])
+    def get_all_measurements_for_sensor(sensorID):
+        database = Database(settings['database']['databasePath'])
+        sensor = database.get_sensor(sensorID)
+        if not sensor:
+            return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'})
+
+        return jsonify(database.get_all_measurements_for_sensor(sensorID))
+
+    @routes.route('/measurements', methods=['POST'])
+    def addMeasurement():
         try:
             parameters = RequestValidator.validate(request, DeviceParameters.get_values())
             database = Database(settings['database']['databasePath'])
 
+            deviceName = parameters[DeviceParameters.DEVICE.value]
             if not database.get_device_by_name(deviceName):
                 database.add_device(deviceName)
             device = database.get_device_by_name(deviceName)
@@ -95,7 +116,7 @@ def construct_blueprint(settings, version):
         except ValidationError as e:
             return e.response, 400
 
-        return ""
+        return jsonify({'success': True})
 
     def __add_sensor_if_not_exists(database: Database, deviceID: int, sensorParams: Dict) -> Dict[str, str]:
         sensorName = sensorParams[SensorParameters.NAME.value]
@@ -107,23 +128,4 @@ def construct_blueprint(settings, version):
         database.add_sensor(deviceID, sensorName, sensorType)
         return database.get_sensor_by_name_and_device_id(deviceID, sensorName)
 
-    @routes.route('/measurements', methods=['GET'])
-    def get_all_measurements():
-        database = Database(settings['database']['databasePath'])
-        return jsonify(database.get_all_measurements())
-
-    @routes.route('/measurement/<int:measurementID>', methods=['GET'])
-    def get_measurement(measurementID):
-        database = Database(settings['database']['databasePath'])
-        return jsonify(database.get_measurement(measurementID))
-
-    @routes.route('/sensor/<sensorID>/measurements', methods=['GET'])
-    def get_all_measurements_for_sensor(sensorID):
-        database = Database(settings['database']['databasePath'])
-        sensor = database.get_sensor(sensorID)
-        if not sensor:
-            return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'})
-
-        return jsonify(database.get_all_measurements_for_sensor(sensorID))
-
     return routes
-- 
GitLab