From 2230f6e365920852a101cbcd06ac27c9959283f9 Mon Sep 17 00:00:00 2001 From: Jose Date: Mon, 3 Mar 2025 21:44:11 +0100 Subject: [PATCH] url params added --- .../contaminus/database/DatabaseManager.java | 2 +- .../contaminus/database/QueryBuilder.java | 63 +++++++++++++++++++ .../contaminus/server/HttpServerVerticle.java | 51 ++++++++++++++- 3 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/database/DatabaseManager.java b/backend/vertx/src/main/java/net/miarma/contaminus/database/DatabaseManager.java index 8c413ce..03978e9 100644 --- a/backend/vertx/src/main/java/net/miarma/contaminus/database/DatabaseManager.java +++ b/backend/vertx/src/main/java/net/miarma/contaminus/database/DatabaseManager.java @@ -19,7 +19,7 @@ public class DatabaseManager { config.getProperty("db.name")) .put("user", config.getProperty("db.user")) .put("password", config.getProperty("db.pwd")) - .put("max_pool_size", 5); + .put("max_pool_size", config.getProperty("db.poolSize")); pool = JDBCPool.pool(vertx, dbConfig); } 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 new file mode 100644 index 0000000..c6f644e --- /dev/null +++ b/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java @@ -0,0 +1,63 @@ +package net.miarma.contaminus.database; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.StringJoiner; + +public class QueryBuilder { + private StringBuilder query; + private List conditions; + + public QueryBuilder() { + this.query = new StringBuilder(); + this.conditions = new ArrayList<>(); + } + + public static QueryBuilder select(String... columns) { + QueryBuilder qb = new QueryBuilder(); + StringJoiner joiner = new StringJoiner(", "); + for (String column : columns) { + joiner.add(column); + } + qb.query.append("SELECT ").append(joiner).append(" "); + return qb; + } + + public QueryBuilder from(String table) { + query.append("FROM ").append(table).append(" "); + return this; + } + + public QueryBuilder where(String condition) { + conditions.add(condition); + return this; + } + + public QueryBuilder orderBy(Optional column, Optional order) { + if (column.isPresent()) { + query.append("ORDER BY ").append(column.get()).append(" "); + if (order.isPresent()) { + query.append(order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC").append(" "); + } + } + return this; + } + + public QueryBuilder limit(Optional limit) { + limit.ifPresent(value -> query.append("LIMIT ").append(value).append(" ")); + return this; + } + + public String build() { + if (!conditions.isEmpty()) { + query.append("WHERE "); + StringJoiner joiner = new StringJoiner(" AND "); + for (String condition : conditions) { + joiner.add(condition); + } + query.append(joiner).append(" "); + } + return query.toString().trim() + ";"; + } +} \ No newline at end of file diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java b/backend/vertx/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java index 98d89f2..61f0736 100644 --- a/backend/vertx/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java +++ b/backend/vertx/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java @@ -1,14 +1,17 @@ package net.miarma.contaminus.server; +import java.util.Optional; + import io.vertx.core.AbstractVerticle; +import io.vertx.core.eventbus.DeliveryOptions; +import io.vertx.core.eventbus.Message; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; import io.vertx.ext.web.handler.StaticHandler; -import io.vertx.core.eventbus.DeliveryOptions; -import io.vertx.core.eventbus.Message; import net.miarma.contaminus.common.Constants; +import net.miarma.contaminus.database.QueryBuilder; public class HttpServerVerticle extends AbstractVerticle { @Override @@ -19,6 +22,7 @@ public class HttpServerVerticle extends AbstractVerticle { router.route("/*").handler(StaticHandler.create("webroot").setDefaultContentEncoding("UTF-8")); router.get(Constants.API_PREFIX + "/sensors").blockingHandler(this::getAllSensors); + router.get(Constants.API_PREFIX + "/sensors/:id").blockingHandler(this::getSensorById); router.get(Constants.API_PREFIX + "/status").handler(ctx -> ctx.json(new JsonObject().put("status", "OK")) ); @@ -33,7 +37,27 @@ public class HttpServerVerticle extends AbstractVerticle { } private void getAllSensors(RoutingContext context) { - vertx.eventBus().request("db.query", "SELECT * FROM sensor_mq_data", new DeliveryOptions(), ar -> { + Optional sort = Optional.ofNullable(context.request().getParam("_sort")); + Optional order = Optional.ofNullable(context.request().getParam("_order")); + // forma tela de rara que me ha dado chatgpt para parsear esto XD + Optional limit = Optional.ofNullable(context.request().getParam("_limit")) + .map(s -> { + try { + return Integer.parseInt(s); + } catch (NumberFormatException e) { + return null; + } + }); + + + String query = QueryBuilder + .select("*") + .from("sensor_mq_data") + .orderBy(sort, order) + .limit(limit) + .build(); + + vertx.eventBus().request("db.query", query, new DeliveryOptions(), ar -> { if (ar.succeeded()) { Message result = ar.result(); JsonArray jsonArray = (JsonArray) result.body(); @@ -43,4 +67,25 @@ public class HttpServerVerticle extends AbstractVerticle { } }); } + + + private void getSensorById(RoutingContext context) { + String id = context.request().getParam("id"); + + String query = QueryBuilder + .select("*") + .from("sensor_mq_data") + .where("id = " + id) + .build(); + + vertx.eventBus().request("db.query", query, new DeliveryOptions(), ar -> { + if (ar.succeeded()) { + Message result = ar.result(); + JsonArray jsonArray = (JsonArray) result.body(); + context.json(jsonArray); + } else { + context.fail(500, ar.cause()); + } + }); + } }