From dfc0c57bcea74835221c20388f1a064f6bff3994 Mon Sep 17 00:00:00 2001 From: Jose Date: Tue, 11 Mar 2025 10:46:51 +0100 Subject: [PATCH] database refactor --- .../contaminus/database/QueryBuilder.java | 20 ++++++++-- .../miarma/contaminus/server/ApiVerticle.java | 38 +++++++++++++------ .../contaminus/server/DatabaseVerticle.java | 8 ++-- backend/vertx/target/classes/.gitignore | 2 +- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java b/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java index 9ae5a67..dca117a 100644 --- a/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java +++ b/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java @@ -8,6 +8,9 @@ import java.util.StringJoiner; public class QueryBuilder { private StringBuilder query; private List conditions; + private String sort; + private String order; + private String limit; public QueryBuilder() { this.query = new StringBuilder(); @@ -68,16 +71,16 @@ public class QueryBuilder { public QueryBuilder orderBy(Optional column, Optional order) { if (column.isPresent()) { - query.append("ORDER BY ").append(column.get()).append(" "); + sort = "ORDER BY " + column.get() + " "; if (order.isPresent()) { - query.append(order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC").append(" "); + sort += order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC" + " "; } } return this; } - public QueryBuilder limit(Optional limit) { - limit.ifPresent(value -> query.append("LIMIT ").append(value).append(" ")); + public QueryBuilder limit(Optional limitParam) { + limit = limitParam.isPresent() ? "LIMIT " + limitParam.get() + " " : ""; return this; } @@ -90,6 +93,15 @@ public class QueryBuilder { } query.append(joiner).append(" "); } + if (order != null && !order.isEmpty()) { + query.append(order); + } + if (sort != null && !sort.isEmpty()) { + query.append(sort); + } + if (limit != null && !limit.isEmpty()) { + query.append(limit); + } return query.toString().trim() + ";"; } } \ No newline at end of file diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java b/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java index 8725c51..4da4c25 100644 --- a/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java +++ b/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java @@ -35,9 +35,9 @@ public class ApiVerticle extends AbstractVerticle { .allowedHeaders(allowedHeaders) .allowedMethods(allowedMethods)); router.route().handler(BodyHandler.create()); - router.get(Constants.API_PREFIX + "/sensors").blockingHandler(this::getAllSensors); - router.get(Constants.API_PREFIX + "/sensors/:id").blockingHandler(this::getSensorById); - router.post(Constants.API_PREFIX + "/sensors").blockingHandler(this::insertSensor); + router.get(Constants.API_PREFIX + "/devices").blockingHandler(this::getAllDevices); + router.get(Constants.API_PREFIX + "/devices/:id").blockingHandler(this::getDeviceById); + router.post(Constants.API_PREFIX + "/devices").blockingHandler(this::insertSensor); router.get(Constants.API_PREFIX + "/status").handler(ctx -> ctx.json(new JsonObject().put("status", "OK"))); vertx.createHttpServer() @@ -58,7 +58,7 @@ public class ApiVerticle extends AbstractVerticle { }); } - private void getAllSensors(RoutingContext context) { + private void getAllDevices(RoutingContext context) { Optional sort = Optional.ofNullable(context.request().getParam("_sort")); Optional order = Optional.ofNullable(context.request().getParam("_order")); Optional limit = Optional.ofNullable(context.request().getParam("_limit")) @@ -72,7 +72,7 @@ public class ApiVerticle extends AbstractVerticle { String query = QueryBuilder .select("*") - .from("sensor_mq_data") + .from("v_DevicesMeasures") .orderBy(sort, order) .limit(limit) .build(); @@ -88,12 +88,25 @@ public class ApiVerticle extends AbstractVerticle { }); } - private void getSensorById(RoutingContext context) { + private void getDeviceById(RoutingContext context) { + Optional sort = Optional.ofNullable(context.request().getParam("_sort")); + Optional order = Optional.ofNullable(context.request().getParam("_order")); + Optional limit = Optional.ofNullable(context.request().getParam("_limit")) + .map(s -> { + try { + return Integer.parseInt(s); + } catch (NumberFormatException e) { + return null; + } + }); + String id = context.request().getParam("id"); String query = QueryBuilder .select("*") - .from("sensor_mq_data") - .where("id = ?", id) + .from("v_DevicesMeasures") + .where("deviceId = ?", id) + .orderBy(sort, order) + .limit(limit) .build(); vertx.eventBus().request("db.query", query, req -> { @@ -114,8 +127,9 @@ public class ApiVerticle extends AbstractVerticle { context.fail(400, new IllegalArgumentException("Body is missing or invalid")); return; } - - String sensorType = body.getString("sensor_type"); + + Integer deviceId = body.getInteger("deviceId"); + String sensorType = body.getString("sensorType"); Float lat = body.getFloat("lat"); Float lon = body.getFloat("lon"); Float value = body.getFloat("value"); @@ -126,8 +140,8 @@ public class ApiVerticle extends AbstractVerticle { } String query = QueryBuilder - .insert("sensor_mq_data", "sensor_type", "value", "lat", "lon") - .values(sensorType, value, lat, lon) + .insert("measures", "deviceId", "sensorType", "lat", "lon", "value") + .values(deviceId, sensorType, lat, lon, value) .build(); vertx.eventBus().request("db.query", query, req -> { diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/server/DatabaseVerticle.java b/backend/vertx/src/main/java/net/miarma/contaminus/server/DatabaseVerticle.java index a969d7b..22d4a23 100644 --- a/backend/vertx/src/main/java/net/miarma/contaminus/server/DatabaseVerticle.java +++ b/backend/vertx/src/main/java/net/miarma/contaminus/server/DatabaseVerticle.java @@ -58,11 +58,13 @@ public class DatabaseVerticle extends AbstractVerticle { JsonArray jsonArray = new JsonArray(); for (Row row : rows) { jsonArray.add(new JsonObject() - .put("id", row.getInteger("id")) - .put("sensor_type", row.getString("sensor_type")) - .put("value", row.getFloat("value")) + .put("deviceId", row.getInteger("deviceId")) + .put("deviceName", row.getString("deviceName")) + .put("measureId", row.getInteger("measureId")) + .put("sensorType", row.getString("sensorType")) .put("lat", row.getFloat("lat")) .put("lon", row.getFloat("lon")) + .put("value", row.getFloat("value")) .put("timestamp", row.getLocalDateTime("timestamp").toString()) ); } diff --git a/backend/vertx/target/classes/.gitignore b/backend/vertx/target/classes/.gitignore index 64663da..eded030 100644 --- a/backend/vertx/target/classes/.gitignore +++ b/backend/vertx/target/classes/.gitignore @@ -1,2 +1,2 @@ -/META-INF/ /net/ +/META-INF/