Parcourir la source

Added API 'driverIdUnitIdActionsGET'

Lukas Cerny il y a 1 an
Parent
commit
93c14dbe0a

+ 24 - 0
src/main/java/cz/senslog/telemetry/database/domain/Action.java

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

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

@@ -325,6 +325,20 @@ public class MapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Action>> findActionsByDriverIdAndUnitId(int driverId, long unitId) {
+        return client.preparedQuery("SELECT a.id, a.name FROM maplog.action AS a " +
+                "JOIN maplog.driver_to_action AS dta ON a.id = dta.action_id " +
+                "WHERE dta.driver_id = $1 AND dta.unit_id = $2")
+                .execute(Tuple.of(driverId, unitId))
+                .map(rs -> StreamSupport.stream(rs.spliterator(), false)
+                        .map(row -> Action.of(
+                                row.getInteger("id"),
+                                row.getString("name"))
+                        ).collect(toList()))
+                .onFailure(logger::catching);
+    }
+
+    @Override
     public Future<List<Unit>> findUnitsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to) {
         String whereTimestampClause;
         Tuple tupleParams;

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

@@ -176,6 +176,11 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
+    public Future<List<Action>> findActionsByDriverIdAndUnitId(int driverId, long unitId) {
+        return Future.succeededFuture(Collections.emptyList());
+    }
+
+    @Override
     public Future<List<Unit>> findUnitsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to) {
         return Future.succeededFuture(Collections.emptyList());
     }

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

@@ -50,6 +50,8 @@ public interface SensLogRepository {
     Future<Driver> findDriverById(int driverId);
 
 
+    Future<List<Action>> findActionsByDriverIdAndUnitId(int driverId, long unitId);
+
     Future<List<Unit>> findUnitsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to);
     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

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

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

@@ -891,4 +891,25 @@ public class OpenAPIHandler {
                         )).encode())
                         .onFailure(th -> rc.fail(400, th)));
     }
+
+    public void driverIdUnitIdActionsGET(RoutingContext rc) {
+        String host =  hostURLFull(rc.request());
+
+        int driverId = Integer.parseInt(rc.pathParam("driverId"));
+        long unitId = Long.parseLong(rc.pathParam("unitId"));
+
+        List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
+        boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
+
+        repo.findActionsByDriverIdAndUnitId(driverId, unitId)
+                .onSuccess(actions -> rc.response().end(new JsonArray(
+                        actions.stream().map(a -> (navigationLinks ? JsonObject.of(
+                                "DriverUntAction@NavigationLink", String.format("%s/drivers/%d/units/%d/actions/%d",host, driverId, unitId, a.getId())
+                        ) : JsonObject.of()).mergeIn(JsonObject.of(
+                                "id", a.getId(),
+                                "name", a.getName()
+                        ))).collect(toList())
+                ).encode()))
+                .onFailure(th -> rc.fail(400, th));
+    }
 }

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

@@ -563,7 +563,7 @@ paths:
                 $ref: '#/components/schemas/Error'
 
   /drivers/{driverId}/units:
-    get:
+    get: # done
       operationId: driverIdUnitsGET
       summary: Publish basic info about driver's units
       parameters:
@@ -588,7 +588,7 @@ paths:
                 $ref: '#/components/schemas/Error'
 
   /drivers/{driverId}/units/{unitId}:
-    get:
+    get: # done
       operationId: driverIdUnitIdGET
       summary: Publish detailed info about driver's unit
       parameters: