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