From 69fbc8147fd1c168c68e4fdb77541b569d08d585 Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Fri, 8 Jul 2022 15:27:44 -0500 Subject: [PATCH] QQQ-21: added 'count' action --- pom.xml | 4 +- .../javalin/QJavalinImplementation.java | 44 +++++++++++++++++++ .../javalin/QJavalinImplementationTest.java | 18 ++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 52aa4ef6..f4d71592 100644 --- a/pom.xml +++ b/pom.xml @@ -53,12 +53,12 @@ com.kingsrook.qqq qqq-backend-core - 0.1.0-20220708.152048-3 + 0.1.0-20220708.195335-5 com.kingsrook.qqq qqq-backend-module-rdbms - 0.0.0 + 0.1.0-20220708.202041-3 test diff --git a/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java b/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java index 83e1f65d..ce80c7d4 100644 --- a/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java +++ b/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; +import com.kingsrook.qqq.backend.core.actions.CountAction; import com.kingsrook.qqq.backend.core.actions.DeleteAction; import com.kingsrook.qqq.backend.core.actions.InsertAction; import com.kingsrook.qqq.backend.core.actions.MetaDataAction; @@ -51,6 +52,8 @@ import com.kingsrook.qqq.backend.core.exceptions.QNotFoundException; import com.kingsrook.qqq.backend.core.exceptions.QUserFacingException; import com.kingsrook.qqq.backend.core.exceptions.QValueException; import com.kingsrook.qqq.backend.core.model.actions.AbstractQRequest; +import com.kingsrook.qqq.backend.core.model.actions.count.CountRequest; +import com.kingsrook.qqq.backend.core.model.actions.count.CountResult; import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest; import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult; import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest; @@ -213,6 +216,9 @@ public class QJavalinImplementation { get("/", QJavalinImplementation::dataQuery); post("/", QJavalinImplementation::dataInsert); // todo - internal to that method, if input is a list, do a bulk - else, single. + path("/count", () -> { + get("", QJavalinImplementation::dataCount); + }); // todo - add put and/or patch at this level (without a primaryKey) to do a bulk update based on primaryKeys in the records. path("/:primaryKey", () -> { @@ -420,6 +426,44 @@ public class QJavalinImplementation + /******************************************************************************* + * + * Filter parameter is a serialized QQueryFilter object, that is to say: + *
+    *   filter=
+    *    {"criteria":[
+    *       {"fieldName":"id","operator":"EQUALS","values":[1]},
+    *       {"fieldName":"name","operator":"IN","values":["Darin","James"]}
+    *     ]
+    *    }
+    * 
+ *******************************************************************************/ + static void dataCount(Context context) + { + try + { + CountRequest countRequest = new CountRequest(qInstance); + setupSession(context, countRequest); + countRequest.setTableName(context.pathParam("table")); + + String filter = stringQueryParam(context, "filter"); + if(filter != null) + { + countRequest.setFilter(JsonUtils.toObject(filter, QQueryFilter.class)); + } + + CountAction countAction = new CountAction(); + CountResult countResult = countAction.execute(countRequest); + + context.result(JsonUtils.toJson(countResult)); + } + catch(Exception e) + { + handleException(context, e); + } + } + + /******************************************************************************* * * Filter parameter is a serialized QQueryFilter object, that is to say: diff --git a/src/test/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementationTest.java b/src/test/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementationTest.java index 860d607c..9fcc095e 100644 --- a/src/test/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementationTest.java +++ b/src/test/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementationTest.java @@ -251,6 +251,24 @@ class QJavalinImplementationTest + /******************************************************************************* + ** test a table count + ** + *******************************************************************************/ + @Test + public void test_dataCount() + { + HttpResponse response = Unirest.get(BASE_URL + "/data/person/count").asString(); + + assertEquals(200, response.getStatus()); + JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody()); + assertTrue(jsonObject.has("count")); + int count = jsonObject.getInt("count"); + assertEquals(5, count); + } + + + /******************************************************************************* ** test a table query **