Selaa lähdekoodia

Added API 'driversGET'

Lukas Cerny 1 vuosi sitten
vanhempi
commit
6191cd4355

+ 24 - 0
src/main/java/cz/senslog/telemetry/database/repository/Driver.java

@@ -0,0 +1,24 @@
+package cz.senslog.telemetry.database.repository;
+
+public class Driver {
+
+    private final int id;
+    private final String name;
+
+    public static Driver of(int id, String name) {
+        return new Driver(id, name);
+    }
+
+    private Driver(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

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

@@ -303,6 +303,18 @@ public class MapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Driver>> allDrivers() {
+        return client.query("SELECT id, name FROM maplog.driver")
+                .execute()
+                .map(rs -> StreamSupport.stream(rs.spliterator(), false)
+                        .map(row -> Driver.of(
+                                row.getInteger("id"),
+                                row.getString("name")
+                        )).collect(toList()))
+                .onFailure(logger::catching);
+    }
+
+    @Override
     public Future<List<CampaignUnit>> findUnitsByCampaignId(long campaignId) {
         return client.preparedQuery("SELECT u.unit_id, utc.camp_id, u.name, u.imei, u.unit_type_id, u.description, utc.from_time, utc.to_time " +
                         "FROM maplog.unit_to_campaign AS utc " +

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

@@ -166,6 +166,11 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Driver>> allDrivers() {
+        return Future.succeededFuture(Collections.emptyList());
+    }
+
+    @Override
     public Future<List<CampaignUnit>> findUnitsByCampaignId(long campaignId) {
         return Future.succeededFuture(Collections.emptyList());
     }

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

@@ -45,6 +45,8 @@ public interface SensLogRepository {
     Future<List<Campaign>> findCampaignsByUnitId(long unitId, ZoneId zone);
 
 
+    Future<List<Driver>> allDrivers();
+
     Future<List<UnitTelemetry>> findObservationsByCampaignId(long campaignId, OffsetDateTime from, OffsetDateTime to, ZoneId zone, int offset, int limit);
     Future<PagingRetrieve<List<UnitTelemetry>>> findObservationsByCampaignIdWithPaging(long campaignId, OffsetDateTime from, OffsetDateTime to, ZoneId zone, int offset, int limit);
 

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

@@ -70,7 +70,6 @@ public final class HttpVertxServer extends AbstractVerticle {
                     openAPIRouterBuilder.operation("unitIdSensorsGET").handler(apiHandler::unitIdSensorsGET);
                     openAPIRouterBuilder.operation("unitIdCampaignsGET").handler(apiHandler::unitIdCampaignsGET);
 
-
                     openAPIRouterBuilder.operation("sensorsGET").handler(apiHandler::sensorsGET);
                     openAPIRouterBuilder.operation("sensorIdGET").handler(apiHandler::sensorIdGET);
                     openAPIRouterBuilder.operation("sensorIdUnitsGET").handler(apiHandler::sensorIdUnitsGET);
@@ -79,6 +78,8 @@ public final class HttpVertxServer extends AbstractVerticle {
                     openAPIRouterBuilder.operation("phenomenonIdGET").handler(apiHandler::phenomenonIdGET);
                     openAPIRouterBuilder.operation("phenomenonIdSensorsGET").handler(apiHandler::phenomenonIdSensorsGET);
 
+                    openAPIRouterBuilder.operation("driversGET").handler(apiHandler::driversGET);
+
                     Router mainRouter = openAPIRouterBuilder.createRouter();
 //                    mainRouter.route().handler(LoggerHandler.create());
 //                    mainRouter.route().handler(rc -> logger.info("HTTP Request '{}'.", rc.request().absoluteURI()));

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

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

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

@@ -520,7 +520,7 @@ paths:
                 $ref: '#/components/schemas/Error'
 
   /drivers:
-    get:
+    get: # done
       operationId: driversGET
       summary: Publish basic info about all drivers
       parameters:
@@ -807,8 +807,10 @@ paths:
       operationId: driverIdUnitIdActionIdEventIdLocationsGET
       summary: Publish locations created by the driver while performing specific action on the unit at the time/event
       parameters:
-        - $ref: '#/components/parameters/campaignIdParam'
+        - $ref: '#/components/parameters/driverIdParam'
         - $ref: '#/components/parameters/unitIdParam'
+        - $ref: '#/components/parameters/actionIdParam'
+        - $ref: '#/components/parameters/eventIdParam'
         - $ref: '#/components/parameters/fromParam'
         - $ref: '#/components/parameters/toParam'
         - $ref: '#/components/parameters/zoneParam'