Skip to content
Snippets Groups Projects
Commit 851a6f39 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

delete route for sensor

parent 0fbfa42a
No related branches found
No related tags found
No related merge requests found
...@@ -112,6 +112,33 @@ paths: ...@@ -112,6 +112,33 @@ paths:
application/json: application/json:
schema: schema:
$ref: '#/components/schemas/Sensor' $ref: '#/components/schemas/Sensor'
delete:
tags:
- sensor
summary: Deletes a specific sensor. All correspondig measurements will be deleted too.
operationId: deleteSensor
security:
- bearerAuth: []
parameters:
- in: path
name: sensorID
description: The sensor 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'
/sensor/{sensorID}/measurements: /sensor/{sensorID}/measurements:
get: get:
tags: tags:
......
from flask import Blueprint, jsonify from flask import Blueprint, jsonify
from logic.AuthenticationWrapper import require_api_key
from logic.database.Database import Database from logic.database.Database import Database
...@@ -16,7 +17,7 @@ def construct_blueprint(settings): ...@@ -16,7 +17,7 @@ def construct_blueprint(settings):
database = Database(settings['database']['databasePath']) database = Database(settings['database']['databasePath'])
return jsonify(database.sensorAccess.get_sensor(sensorID)) return jsonify(database.sensorAccess.get_sensor(sensorID))
@sensors.route('/sensor/<sensorID>/measurements', methods=['GET']) @sensors.route('/sensor/<int:sensorID>/measurements', methods=['GET'])
def get_all_measurements_for_sensor(sensorID): def get_all_measurements_for_sensor(sensorID):
database = Database(settings['database']['databasePath']) database = Database(settings['database']['databasePath'])
sensor = database.sensorAccess.get_sensor(sensorID) sensor = database.sensorAccess.get_sensor(sensorID)
...@@ -25,7 +26,7 @@ def construct_blueprint(settings): ...@@ -25,7 +26,7 @@ def construct_blueprint(settings):
return jsonify(database.measurementAccess.get_all_measurements_for_sensor(sensorID)) return jsonify(database.measurementAccess.get_all_measurements_for_sensor(sensorID))
@sensors.route('/sensor/<sensorID>/measurements/latest', methods=['GET']) @sensors.route('/sensor/<int:sensorID>/measurements/latest', methods=['GET'])
def get_latest_measurements_for_sensor(sensorID): def get_latest_measurements_for_sensor(sensorID):
database = Database(settings['database']['databasePath']) database = Database(settings['database']['databasePath'])
sensor = database.sensorAccess.get_sensor(sensorID) sensor = database.sensorAccess.get_sensor(sensorID)
...@@ -34,4 +35,15 @@ def construct_blueprint(settings): ...@@ -34,4 +35,15 @@ def construct_blueprint(settings):
return jsonify(database.measurementAccess.get_latest_measurements_for_sensor(sensorID)) return jsonify(database.measurementAccess.get_latest_measurements_for_sensor(sensorID))
@sensors.route('/sensor/<int:sensorID>', methods=['DELETE'])
@require_api_key(password=settings['api']['key'])
def delete_sensor(sensorID):
database = Database(settings['database']['databasePath'])
if not database.sensorAccess.get_sensor(sensorID):
return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'})
database.measurementAccess.delete_measurements_for_sensor(sensorID)
database.sensorAccess.delete_sensor(sensorID)
return jsonify({'success': True})
return sensors return sensors
...@@ -53,3 +53,6 @@ class MeasurementAccess(DatabaseAccess): ...@@ -53,3 +53,6 @@ class MeasurementAccess(DatabaseAccess):
LOGGER.debug(f'Deleting measurement "{measurementID}"') LOGGER.debug(f'Deleting measurement "{measurementID}"')
self._query(f'DELETE FROM {self.TABLE_NAME} WHERE id = ?', measurementID, fetch_type=FetchType.NONE) self._query(f'DELETE FROM {self.TABLE_NAME} WHERE id = ?', measurementID, fetch_type=FetchType.NONE)
def delete_measurements_for_sensor(self, sensorID: int):
LOGGER.debug(f'Deleting all measurement for sensor "{sensorID}"')
self._query(f'DELETE FROM {self.TABLE_NAME} WHERE sensor_id = ?', sensorID, fetch_type=FetchType.NONE)
...@@ -19,10 +19,10 @@ class SensorAccess(DatabaseAccess): ...@@ -19,10 +19,10 @@ class SensorAccess(DatabaseAccess):
type TEXT NOT NULL)''', fetch_type=FetchType.NONE) type TEXT NOT NULL)''', fetch_type=FetchType.NONE)
def get_all_sensors(self) -> List[Dict[str, str]]: def get_all_sensors(self) -> List[Dict[str, str]]:
return self._query(f'SELECT * FROM {self.TABLE_NAME} ORDER BY device_id, name', fetch_type=FetchType.ALL) return self._query(f'SELECT * FROM {self.TABLE_NAME} ORDER BY device_id, id', fetch_type=FetchType.ALL)
def get_all_sensors_for_device(self, deviceID: int) -> List[Dict[str, str]]: def get_all_sensors_for_device(self, deviceID: int) -> List[Dict[str, str]]:
return self._query(f'SELECT * FROM {self.TABLE_NAME} WHERE device_id = ? ORDER BY name', return self._query(f'SELECT * FROM {self.TABLE_NAME} WHERE device_id = ? ORDER BY id',
deviceID, deviceID,
fetch_type=FetchType.ALL) fetch_type=FetchType.ALL)
...@@ -42,3 +42,7 @@ class SensorAccess(DatabaseAccess): ...@@ -42,3 +42,7 @@ class SensorAccess(DatabaseAccess):
f'VALUES(?, ?, ?)', f'VALUES(?, ?, ?)',
name, deviceID, sensorType, name, deviceID, sensorType,
fetch_type=FetchType.NONE) fetch_type=FetchType.NONE)
def delete_sensor(self, sensorID: int):
LOGGER.debug(f'Deleting sensor "{sensorID}"')
self._query(f'DELETE FROM {self.TABLE_NAME} WHERE id = ?', sensorID, fetch_type=FetchType.NONE)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment