diff --git a/docs/api.yml b/docs/api.yml index e835c627acde04a78bdc50cfc3d775bc0b97c3f0..dbf8491e053e1597e6e932c34797154dae63b0b4 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -103,6 +103,34 @@ paths: type: array items: $ref: '#/components/schemas/Sensor' + /device: + post: + tags: + - device + summary: Adds a new device. If a device with the provided name already exists an error response is returned. + operationId: addDevice + security: + - bearerAuth: [] + requestBody: + description: Device to add + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/NewDevice' + 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' /sensors: get: @@ -416,6 +444,15 @@ components: type: string example: "20.15" + NewDevice: + type: object + required: + - device + properties: + device: + type: string + example: "myDevice" + SuccessResponse: required: - success diff --git a/src/blueprints/Devices.py b/src/blueprints/Devices.py index c2088ba31ad7a20f5424f2016f0bd668ffbe7cd1..4b84ea2e3d2e4e71851a5b7c9417ea94d6a33c2f 100644 --- a/src/blueprints/Devices.py +++ b/src/blueprints/Devices.py @@ -1,6 +1,8 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request from logic.AuthenticationWrapper import require_api_key +from logic.Parameters import DeviceParameters +from logic.RequestValidator import RequestValidator, ValidationError from logic.database.Database import Database @@ -42,4 +44,23 @@ def construct_blueprint(settings): return jsonify({'success': True}) + @devices.route('/device', methods=['POST']) + @require_api_key(password=settings['api']['key']) + def add_device(): + try: + parameters = RequestValidator.validate(request, [DeviceParameters.DEVICE.value]) + database = Database(settings['database']['databasePath']) + + deviceName = parameters[DeviceParameters.DEVICE.value] + existingDevice = database.deviceAccess.get_device_by_name(deviceName) + if existingDevice: + return jsonify({'success': False, + 'msg': f'A device called "{deviceName}" already exists (ID: {existingDevice["id"]})'}) + + database.deviceAccess.add_device(deviceName) + except ValidationError as e: + return e.response, 400 + + return jsonify({'success': True}) + return devices diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py index 536b8eef06d27ad068fc845a045ed6be2cd7ca0c..535c9db976a8b5f790966d42943179390c26c631 100644 --- a/src/blueprints/Measurements.py +++ b/src/blueprints/Measurements.py @@ -23,7 +23,7 @@ def construct_blueprint(settings): @measurements.route('/measurements', methods=['POST']) @require_api_key(password=settings['api']['key']) - def addMeasurement(): + def add_measurement(): try: parameters = RequestValidator.validate(request, DeviceParameters.get_values()) database = Database(settings['database']['databasePath'])