Explorar el Código

Added API 'unitsGET'

Lukas Cerny hace 1 año
padre
commit
301e7da7ac

+ 0 - 1
src/main/java/cz/senslog/telemetry/database/domain/Unit.java

@@ -1,6 +1,5 @@
 package cz.senslog.telemetry.database.domain;
 
-
 public class Unit {
 
     private final long unitId;

+ 8 - 3
src/main/java/cz/senslog/telemetry/database/repository/MapLogRepository.java

@@ -111,11 +111,16 @@ public class MapLogRepository implements SensLogRepository {
     }
 
     @Override
-    public Future<List<Unit>> loadAllUnits() {
-        return client.query("SELECT unit_id FROM maplog.unit")
+    public Future<List<Unit>> allUnits() {
+        return client.query("SELECT unit_id, imei, name, description FROM maplog.unit")
                 .execute()
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
-                        .map((row) -> Unit.of(row.getLong("unit_id"), row.getString("imei")))
+                        .map((row) -> Unit.of(
+                                row.getLong("unit_id"),
+                                row.getString("imei"),
+                                row.getString("name"),
+                                row.getString("description")
+                        ))
                         .collect(Collectors.toList())
                 );
     }

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

@@ -38,7 +38,7 @@ public class MockMapLogRepository implements SensLogRepository {
         return Future.succeededFuture(true);
     }
 
-    public Future<List<Unit>> loadAllUnits() {
+    public Future<List<Unit>> allUnits() {
         return Future.succeededFuture(Collections.emptyList());
     }
 

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

@@ -19,7 +19,7 @@ public interface SensLogRepository {
     Future<Boolean> createSensor(Sensor sensor, long unitId);
 
 
-    Future<List<Unit>> loadAllUnits();
+    Future<List<Unit>> allUnits();
 
 
     Future<Unit> findUnitById(long unitId);

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

@@ -62,6 +62,7 @@ public final class HttpVertxServer extends AbstractVerticle {
                     openAPIRouterBuilder.operation("campaignIdUnitIdObservationsGET").handler(apiHandler::campaignIdUnitIdObservationsGET);
                     openAPIRouterBuilder.operation("campaignIdUnitIdLocationsGET").handler(apiHandler::campaignIdUnitIdLocationsGET);
 
+                    openAPIRouterBuilder.operation("unitsGET").handler(apiHandler::unitsGET);
                     openAPIRouterBuilder.operation("unitIdGET").handler(apiHandler::unitIdGET);
                     openAPIRouterBuilder.operation("unitIdSensorsGET").handler(apiHandler::unitIdSensorsGET);
 

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

@@ -479,4 +479,22 @@ public class OpenAPIHandler {
                 ).encode()))
                 .onFailure(th -> rc.fail(400, th));
     }
+
+    public void unitsGET(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.allUnits()
+                .onSuccess(data -> rc.response().end(new JsonArray(
+                        data.stream().map(u -> (navigationLinks ? JsonObject.of(
+                                "Unit@NavigationLink", String.format("%s/units/%d", host, u.getUnitId())
+                        ) : JsonObject.of()).mergeIn(JsonObject.of(
+                                "id", u.getUnitId(),
+                                "name", u.getName(),
+                                "description", u.getDescription()
+                        ))).collect(toList())).encode()))
+                .onFailure(th -> rc.fail(400, th));
+    }
 }

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

@@ -561,8 +561,15 @@ paths:
 
   /units:
     get:
-      operationId: unitAllGET
+      operationId: unitsGET
       summary: Publish info about all units
+      parameters:
+        - in: query
+          name: navigationLinks
+          schema:
+            type: boolean
+            default: true
+          description: Option to disable @NavigationLinks in a response
       responses:
         200:
           description: JSON array of basic info of each unit
@@ -1307,7 +1314,6 @@ components:
     UnitBasicInfo:
       type: object
       required:
-        - Unit@NavigationLink
         - id
         - name
       properties: