瀏覽代碼

Added API 'driverIdGET'

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

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

@@ -283,13 +283,6 @@ public class MapLogRepository implements SensLogRepository {
                 .map(iterator -> iterator.hasNext() ? ROW_TO_PHENOMENON.apply(iterator.next()) : null);
     }
 
-    private static final Function<Row, Campaign> ROW_TO_BASIC_CAMPAIGN = (row) -> Campaign.of(
-            row.getLong("campaign_id"),
-            row.getString("description"),
-            row.getOffsetDateTime("from_time"),
-            row.getOffsetDateTime("to_time")
-    );
-
     @Override
     public Future<List<Campaign>> findCampaignsByUnitId(long unitId, ZoneId zone) {
         return client.preparedQuery("SELECT c.campaign_id, c.description, utc.from_time, utc.to_time " +
@@ -298,7 +291,12 @@ public class MapLogRepository implements SensLogRepository {
                         "WHERE utc.unit_id = $1")
                 .execute(Tuple.of(unitId))
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
-                        .map(ROW_TO_BASIC_CAMPAIGN).collect(Collectors.toList()))
+                        .map((row) -> Campaign.of(
+                                row.getLong("campaign_id"),
+                                row.getString("description"),
+                                row.getOffsetDateTime("from_time"),
+                                row.getOffsetDateTime("to_time")
+                        )).collect(Collectors.toList()))
                 .onFailure(logger::catching);
     }
 
@@ -314,6 +312,19 @@ public class MapLogRepository implements SensLogRepository {
                 .onFailure(logger::catching);
     }
 
+    private static final Function<Row, Driver> ROW_TO_DRIVER = (row) -> Driver.of(
+            row.getInteger("id"),
+            row.getString("name")
+    );
+
+    @Override
+    public Future<Driver> findDriverById(int driverId) {
+        return client.preparedQuery("SELECT id, name FROM maplog.driver WHERE id = $1")
+                .execute(Tuple.of(driverId))
+                .map(RowSet::iterator)
+                .map(iterator -> iterator.hasNext() ? ROW_TO_DRIVER.apply(iterator.next()) : null);
+    }
+
     @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 " +

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

@@ -171,6 +171,11 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<Driver> findDriverById(int driverId) {
+        return Future.succeededFuture(Driver.of(driverId, "mock(name)"));
+    }
+
+    @Override
     public Future<List<CampaignUnit>> findUnitsByCampaignId(long campaignId) {
         return Future.succeededFuture(Collections.emptyList());
     }

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

@@ -46,6 +46,7 @@ public interface SensLogRepository {
 
 
     Future<List<Driver>> allDrivers();
+    Future<Driver> findDriverById(int driverId);
 
     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);

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

@@ -79,6 +79,7 @@ public final class HttpVertxServer extends AbstractVerticle {
                     openAPIRouterBuilder.operation("phenomenonIdSensorsGET").handler(apiHandler::phenomenonIdSensorsGET);
 
                     openAPIRouterBuilder.operation("driversGET").handler(apiHandler::driversGET);
+                    openAPIRouterBuilder.operation("driverIdGET").handler(apiHandler::driverIdGET);
 
                     Router mainRouter = openAPIRouterBuilder.createRouter();
 //                    mainRouter.route().handler(LoggerHandler.create());

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

@@ -821,4 +821,24 @@ public class OpenAPIHandler {
                         ))).collect(toList())).encode()))
                 .onFailure(th -> rc.fail(400, th));
     }
+
+    public void driverIdGET(RoutingContext rc) {
+        String host =  hostURLFull(rc.request());
+
+        int driverId = Integer.parseInt(rc.pathParam("driverId"));
+
+        List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
+        boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
+
+        repo.findDriverById(driverId)
+                .onSuccess(d -> rc.response().end((navigationLinks ? JsonObject.of(
+                                "self@NavigationLink", String.format("%s/drivers/%d", host, d.getId()),
+                                "Units@NavigationLink", String.format("%s/drivers/%d/units", host, d.getId()),
+                                "Actions@NavigationLink", String.format("%s/drivers/%d/actions", host, d.getId())
+                        ) : JsonObject.of()).mergeIn(JsonObject.of(
+                                "id", d.getId(),
+                                "name", d.getName()
+                        )).encode())
+                        .onFailure(th -> rc.fail(400, th)));
+    }
 }