瀏覽代碼

Added API 'sensorsGET'

Lukas Cerny 1 年之前
父節點
當前提交
e4ce920655

+ 9 - 0
src/main/java/cz/senslog/telemetry/database/repository/MapLogRepository.java

@@ -182,6 +182,15 @@ public class MapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Sensor>> allSensors() {
+        return client.query("SELECT sensor_id, sensor_name, sensor_type, io_id, phenomenon_id, description FROM maplog.sensor")
+                .execute()
+                .map(rs -> StreamSupport.stream(rs.spliterator(), false)
+                        .map(ROW_TO_BASIC_SENSOR).collect(Collectors.toList())
+                );
+    }
+
+    @Override
     public Future<List<Sensor>> findSensorsByUnitId(long unitId) {
         return client.preparedQuery("SELECT s.sensor_id, s.sensor_name, s.sensor_type, s.io_id, s.phenomenon_id, s.description " +
                         "FROM maplog.unit_to_sensor AS uts " +

+ 5 - 0
src/main/java/cz/senslog/telemetry/database/repository/MockMapLogRepository.java

@@ -52,6 +52,11 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Sensor>> allSensors() {
+        return Future.succeededFuture(Collections.emptyList());
+    }
+
+    @Override
     public Future<Sensor> findSensorById(long sensorId) {
         return Future.succeededFuture(Sensor.of(sensorId, "mock(name)", "mock(type)", -1, null, "mock(description)"));
     }

+ 1 - 0
src/main/java/cz/senslog/telemetry/database/repository/SensLogRepository.java

@@ -27,6 +27,7 @@ public interface SensLogRepository {
     Future<Unit> findUnitByIMEI(String imei);
 
 
+    Future<List<Sensor>> allSensors();
     Future<Sensor> findSensorById(long sensorId);
     Future<Sensor> findSensorByIOAndUnitId(int ioID, long unitId);
 

+ 1 - 0
src/main/java/cz/senslog/telemetry/server/HttpVertxServer.java

@@ -67,6 +67,7 @@ public final class HttpVertxServer extends AbstractVerticle {
                     openAPIRouterBuilder.operation("unitIdCampaignsGET").handler(apiHandler::unitIdCampaignsGET);
 
 
+                    openAPIRouterBuilder.operation("sensorsGET").handler(apiHandler::sensorsGET);
                     openAPIRouterBuilder.operation("sensorIdGET").handler(apiHandler::sensorIdGET);
 
                     Router mainRouter = openAPIRouterBuilder.createRouter();

+ 18 - 0
src/main/java/cz/senslog/telemetry/server/OpenAPIHandler.java

@@ -545,4 +545,22 @@ public class OpenAPIHandler {
                         )).encode())
                         .onFailure(th -> rc.fail(400, th)));
     }
+
+    public void sensorsGET(RoutingContext rc) {
+        String host =  hostURLFull(rc.request());
+
+        List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
+        boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
+
+        repo.allSensors()
+                .onSuccess(data -> rc.response().end(new JsonArray(
+                        data.stream().map(s -> (navigationLinks ? JsonObject.of(
+                                "Sensor@NavigationLink", String.format("%s/sensors/%d", host, s.getSensorId())
+                        ) : JsonObject.of()).mergeIn(JsonObject.of(
+                                "sensorId", s.getSensorId(),
+                                "name", s.getName(),
+                                "description", s.getDescription()
+                        ))).collect(toList())).encode()))
+                .onFailure(th -> rc.fail(400, th));
+    }
 }

+ 8 - 2
src/main/resources/openAPISpec.yaml

@@ -688,8 +688,15 @@ paths:
 
   /sensors:
     get:
-      operationId: sensorAllGET
+      operationId: sensorsGET
       summary: Publish info about all sensors
+      parameters:
+        - in: query
+          name: navigationLinks
+          schema:
+            type: boolean
+            default: true
+          description: Option to disable @NavigationLinks in a response
       responses:
         200:
           description: JSON Array of info about sensors
@@ -1448,7 +1455,6 @@ components:
     SensorBasicInfo:
       type: object
       required:
-        - Sensor@NavigationLink
         - id
         - name
       properties: