Преглед на файлове

Added From and To param for endpoint 'driverIdActionsGET'

Lukas Cerny преди 1 година
родител
ревизия
dc9089749d

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

@@ -368,11 +368,27 @@ public class MapLogRepository implements SensLogRepository {
     }
 
     @Override
-    public Future<List<Action>> findActionsByDriverId(int driverId) {
+    public Future<List<Action>> findActionsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to) {
+        String whereTimestampClause;
+        Tuple tupleParams;
+        if (from != null && to != null) {
+            whereTimestampClause = "WHERE dta.driver_id = $1 AND dta.from_time >= $2 AND dta.to_time < $3";
+            tupleParams = Tuple.of(driverId, from, to);
+        } else if (from != null) {
+            whereTimestampClause = "WHERE dta.driver_id = $1 AND dta.from_time >= $2";
+            tupleParams = Tuple.of(driverId, from);
+        } else if (to != null) {
+            whereTimestampClause = "WHERE dta.driver_id = $1 AND dta.to_time < $2";
+            tupleParams = Tuple.of(driverId, to);
+        } else {
+            whereTimestampClause = "WHERE dta.driver_id = $1";
+            tupleParams = Tuple.of(driverId);
+        }
+
         return client.preparedQuery("SELECT a.action_id, a.name FROM maplog.action AS a " +
                         "JOIN maplog.driver_to_action AS dta ON a.action_id = dta.action_id " +
-                        "WHERE dta.driver_id = $1 ORDER BY a.action_id")
-                .execute(Tuple.of(driverId))
+                        whereTimestampClause + " ORDER BY a.action_id")
+                .execute(tupleParams)
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
                         .map(row -> Action.of(
                                 row.getInteger("action_id"),

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

@@ -207,7 +207,7 @@ public class MockMapLogRepository implements SensLogRepository {
     }
 
     @Override
-    public Future<List<Action>> findActionsByDriverId(int driverId) {
+    public Future<List<Action>> findActionsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to) {
         return Future.succeededFuture(Collections.emptyList());
     }
 

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

@@ -54,7 +54,7 @@ public interface SensLogRepository {
     Future<List<Driver>> findDriversByUnitId(long unitId);
 
     Future<List<Action>> findActionsByDriverIdAndUnitId(int driverId, long unitId);
-    Future<List<Action>> findActionsByDriverId(int driverId);
+    Future<List<Action>> findActionsByDriverId(int driverId, OffsetDateTime from, OffsetDateTime to);
     Future<Action> findActionByIdAndDriverId(int actionId, int driverId);
     Future<Action> findActionByIdAndDriverIdAndUnitId(int actionId, int driverId, long unitId);
 

+ 6 - 2
src/main/java/cz/senslog/telemetry/server/ws/OpenAPIHandler.java

@@ -1105,12 +1105,16 @@ public class OpenAPIHandler {
 
         int driverId = Integer.parseInt(rc.pathParam("driverId"));
 
-        // TODO add from & to
+        List<String> paramFrom = rc.queryParam("from");
+        OffsetDateTime from = TernaryCondition.<OffsetDateTime>ternaryIf(paramFrom::isEmpty, () -> null, () -> OffsetDateTime.parse(paramFrom.get(0)));
+
+        List<String> paramTo = rc.queryParam("to");
+        OffsetDateTime to = TernaryCondition.<OffsetDateTime>ternaryIf(paramTo::isEmpty, () -> null, () -> OffsetDateTime.parse(paramTo.get(0)));
 
         List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
         boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
 
-        repo.findActionsByDriverId(driverId)
+        repo.findActionsByDriverId(driverId, from, to)
                 .onSuccess(actions -> rc.response().end(new JsonArray(
                         actions.stream().map(a -> (navigationLinks ? JsonObject.of(
                                 "DriverAction@NavigationLink", String.format("%s/drivers/%d/actions/%d",host, driverId, a.getId())

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

@@ -664,15 +664,17 @@ paths:
           description: unexpected error
           content:
             application/json:
-              schema:
+              schema: 
                 $ref: '#/components/schemas/Error'
 
   /drivers/{driverId}/actions:
-    get: # TODO add from & to
+    get:
       operationId: driverIdActionsGET
       summary: Publish basic info about driver's actions
       parameters:
         - $ref: '#/components/parameters/driverIdParam'
+        - $ref: '#/components/parameters/fromParam'
+        - $ref: '#/components/parameters/toParam'
         - $ref: '#/components/parameters/navigationLinksParam'
       responses:
         200: