diff --git a/docs/api.yml b/docs/api.yml index 0bc3a2a5c4da5c611091946f20c782c44c5e49be..1d20809f8f6730c464114f43dbf7f5fcaddf8817 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -50,10 +50,30 @@ paths: application/json: schema: $ref: '#/components/schemas/Device' + /device/{deviceName}/sensors: + get: + summary: Gets all sensors for a specific device + operationId: deviceSensors + parameters: + - in: path + name: deviceName + description: The device name + required: true + schema: + type: string + responses: + '200': + description: All available sensors + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Sensor' /device/{deviceName}/sensors/{sensorName}: get: - summary: Gets a specific device - operationId: device + summary: Gets a specific sensor for a device + operationId: deviceSensor parameters: - in: path name: deviceName diff --git a/src/blueprints/Routes.py b/src/blueprints/Routes.py index 3ae54e1db5b47ef300f045efc656641114780c4a..fe5f6132300fa6bc3b131a4396dae1af58c3ef9b 100644 --- a/src/blueprints/Routes.py +++ b/src/blueprints/Routes.py @@ -60,6 +60,15 @@ def construct_blueprint(settings, version): database = Database(settings['database']['databasePath']) return jsonify(database.get_all_sensors()) + @routes.route('/device/<deviceName>/sensors/', methods=['GET']) + def get_all_sensors_for_device(deviceName): + database = Database(settings['database']['databasePath']) + device = database.get_device(deviceName) + if not device: + return jsonify({'success': False, 'msg': f'No device with name "{deviceName}" existing'}) + + return jsonify(database.get_all_sensors_for_device(device)) + @routes.route('/device/<deviceName>/sensors/<sensorName>', methods=['GET']) def get_sensor(deviceName, sensorName): database = Database(settings['database']['databasePath']) diff --git a/src/logic/Database.py b/src/logic/Database.py index cdf0843b23cd1a7a96ff6cdbfc641d41a3b1f848..59ac3f310dd96f185ab8ae7b0e2e3d5f5a3fc85d 100644 --- a/src/logic/Database.py +++ b/src/logic/Database.py @@ -82,6 +82,11 @@ class Database: def get_all_sensors(self): return self.__query(f'SELECT * FROM {self.TABLE_SENSOR} ORDER BY device_id, name', fetch_type=FetchType.ALL) + def get_all_sensors_for_device(self, device: Dict[str, str]): + return self.__query(f'SELECT * FROM {self.TABLE_SENSOR} WHERE device_id = ? ORDER BY name', + device['id'], + fetch_type=FetchType.ALL) + def get_sensor(self, deviceID: int, name: str): return self.__query(f'SELECT * FROM {self.TABLE_SENSOR} WHERE device_id = ? AND name = ?', deviceID, name,