Procházet zdrojové kódy

Added API 'phenomenonsGET'

Lukas Cerny před 1 rokem
rodič
revize
2135a49cd8

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

@@ -202,6 +202,18 @@ public class MapLogRepository implements SensLogRepository {
                 );
     }
 
+    @Override
+    public Future<List<Phenomenon>> allPhenomenons() {
+        return client.query("SELECT id, name FROM maplog.phenomenon")
+                .execute()
+                .map(rs -> StreamSupport.stream(rs.spliterator(), false)
+                        .map(row -> Phenomenon.of(
+                                row.getLong("id"),
+                                row.getString("name")
+                        )).collect(Collectors.toList())
+                );
+    }
+
     private static final Function<Row, Phenomenon> ROW_TO_PHENOMENON = (row) -> Phenomenon.of(
             row.getLong("id"),
             row.getString("name"),

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

@@ -126,6 +126,11 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Phenomenon>> allPhenomenons() {
+        return Future.succeededFuture(Collections.emptyList());
+    }
+
+    @Override
     public Future<Phenomenon> findPhenomenonById(long phenomenonId) {
         return Future.succeededFuture(Phenomenon.of(phenomenonId, "mock(name)"));
     }

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

@@ -33,6 +33,7 @@ public interface SensLogRepository {
     Future<List<Sensor>> findSensorsByUnitId(long unitId);
 
 
+    Future<List<Phenomenon>> allPhenomenons();
     Future<Phenomenon> findPhenomenonById(long phenomenonId);
 
 

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

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

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

@@ -606,4 +606,21 @@ public class OpenAPIHandler {
                         )).encode())
                         .onFailure(th -> rc.fail(400, th)));
     }
+
+    public void phenomenonsGET(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.allPhenomenons()
+                .onSuccess(data -> rc.response().end(new JsonArray(
+                        data.stream().map(p -> (navigationLinks ? JsonObject.of(
+                                "Phenomenon@NavigationLink", String.format("%s/phenomenons/%d", host, p.getId())
+                        ) : JsonObject.of()).mergeIn(JsonObject.of(
+                                "id", p.getId(),
+                                "name", p.getName()
+                        ))).collect(toList())).encode()))
+                .onFailure(th -> rc.fail(400, th));
+    }
 }

+ 3 - 12
src/main/resources/openAPISpec.yaml

@@ -781,8 +781,8 @@ paths:
                 $ref: '#/components/schemas/Error'
 
   /phenomenons:
-    get:
-      operationId: phenomenonAllGET
+    get: # done
+      operationId: phenomenonsGET
       summary: Publish info about all phenomenons
       parameters:
         - in: query
@@ -808,7 +808,7 @@ paths:
                 $ref: '#/components/schemas/Error'
 
   /phenomenons/{phenomenonId}:
-    get:
+    get: # done
       operationId: phenomenonIdGET
       summary: Publish info about the phenomenon
       parameters:
@@ -1570,30 +1570,21 @@ components:
     PhenomenonBasicInfo:
       type: object
       required:
-        - Phenomenon@NavigationLink
-        - Sensors@NavigationLink
         - id
         - name
       properties:
         Phenomenon@NavigationLink:
           type: string
           format: uri
-        Sensors@NavigationLink:
-          type: string
-          format: uri
         id:
           type: integer
           format: int64
         name:
           type: string
-        uom:
-          type: string
-          maxLength: 30
       example:
         Phenomenon@NavigationLink: "<domain>/phenomenons/15"
         id: 15
         name: "Temperature"
-        uom: "uom"
 
     PhenomenonDetailInfo:
       type: object