1
0

database refactor

This commit is contained in:
Jose
2025-03-11 10:46:51 +01:00
parent 938e255f5a
commit dfc0c57bce
4 changed files with 48 additions and 20 deletions

View File

@@ -8,6 +8,9 @@ import java.util.StringJoiner;
public class QueryBuilder { public class QueryBuilder {
private StringBuilder query; private StringBuilder query;
private List<String> conditions; private List<String> conditions;
private String sort;
private String order;
private String limit;
public QueryBuilder() { public QueryBuilder() {
this.query = new StringBuilder(); this.query = new StringBuilder();
@@ -68,16 +71,16 @@ public class QueryBuilder {
public QueryBuilder orderBy(Optional<String> column, Optional<String> order) { public QueryBuilder orderBy(Optional<String> column, Optional<String> order) {
if (column.isPresent()) { if (column.isPresent()) {
query.append("ORDER BY ").append(column.get()).append(" "); sort = "ORDER BY " + column.get() + " ";
if (order.isPresent()) { if (order.isPresent()) {
query.append(order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC").append(" "); sort += order.get().equalsIgnoreCase("asc") ? "ASC" : "DESC" + " ";
} }
} }
return this; return this;
} }
public QueryBuilder limit(Optional<Integer> limit) { public QueryBuilder limit(Optional<Integer> limitParam) {
limit.ifPresent(value -> query.append("LIMIT ").append(value).append(" ")); limit = limitParam.isPresent() ? "LIMIT " + limitParam.get() + " " : "";
return this; return this;
} }
@@ -90,6 +93,15 @@ public class QueryBuilder {
} }
query.append(joiner).append(" "); 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() + ";"; return query.toString().trim() + ";";
} }
} }

View File

@@ -35,9 +35,9 @@ public class ApiVerticle extends AbstractVerticle {
.allowedHeaders(allowedHeaders) .allowedHeaders(allowedHeaders)
.allowedMethods(allowedMethods)); .allowedMethods(allowedMethods));
router.route().handler(BodyHandler.create()); router.route().handler(BodyHandler.create());
router.get(Constants.API_PREFIX + "/sensors").blockingHandler(this::getAllSensors); router.get(Constants.API_PREFIX + "/devices").blockingHandler(this::getAllDevices);
router.get(Constants.API_PREFIX + "/sensors/:id").blockingHandler(this::getSensorById); router.get(Constants.API_PREFIX + "/devices/:id").blockingHandler(this::getDeviceById);
router.post(Constants.API_PREFIX + "/sensors").blockingHandler(this::insertSensor); router.post(Constants.API_PREFIX + "/devices").blockingHandler(this::insertSensor);
router.get(Constants.API_PREFIX + "/status").handler(ctx -> ctx.json(new JsonObject().put("status", "OK"))); router.get(Constants.API_PREFIX + "/status").handler(ctx -> ctx.json(new JsonObject().put("status", "OK")));
vertx.createHttpServer() vertx.createHttpServer()
@@ -58,7 +58,7 @@ public class ApiVerticle extends AbstractVerticle {
}); });
} }
private void getAllSensors(RoutingContext context) { private void getAllDevices(RoutingContext context) {
Optional<String> sort = Optional.ofNullable(context.request().getParam("_sort")); Optional<String> sort = Optional.ofNullable(context.request().getParam("_sort"));
Optional<String> order = Optional.ofNullable(context.request().getParam("_order")); Optional<String> order = Optional.ofNullable(context.request().getParam("_order"));
Optional<Integer> limit = Optional.ofNullable(context.request().getParam("_limit")) Optional<Integer> limit = Optional.ofNullable(context.request().getParam("_limit"))
@@ -72,7 +72,7 @@ public class ApiVerticle extends AbstractVerticle {
String query = QueryBuilder String query = QueryBuilder
.select("*") .select("*")
.from("sensor_mq_data") .from("v_DevicesMeasures")
.orderBy(sort, order) .orderBy(sort, order)
.limit(limit) .limit(limit)
.build(); .build();
@@ -88,12 +88,25 @@ public class ApiVerticle extends AbstractVerticle {
}); });
} }
private void getSensorById(RoutingContext context) { private void getDeviceById(RoutingContext context) {
Optional<String> sort = Optional.ofNullable(context.request().getParam("_sort"));
Optional<String> order = Optional.ofNullable(context.request().getParam("_order"));
Optional<Integer> 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 id = context.request().getParam("id");
String query = QueryBuilder String query = QueryBuilder
.select("*") .select("*")
.from("sensor_mq_data") .from("v_DevicesMeasures")
.where("id = ?", id) .where("deviceId = ?", id)
.orderBy(sort, order)
.limit(limit)
.build(); .build();
vertx.eventBus().request("db.query", query, req -> { vertx.eventBus().request("db.query", query, req -> {
@@ -115,7 +128,8 @@ public class ApiVerticle extends AbstractVerticle {
return; return;
} }
String sensorType = body.getString("sensor_type"); Integer deviceId = body.getInteger("deviceId");
String sensorType = body.getString("sensorType");
Float lat = body.getFloat("lat"); Float lat = body.getFloat("lat");
Float lon = body.getFloat("lon"); Float lon = body.getFloat("lon");
Float value = body.getFloat("value"); Float value = body.getFloat("value");
@@ -126,8 +140,8 @@ public class ApiVerticle extends AbstractVerticle {
} }
String query = QueryBuilder String query = QueryBuilder
.insert("sensor_mq_data", "sensor_type", "value", "lat", "lon") .insert("measures", "deviceId", "sensorType", "lat", "lon", "value")
.values(sensorType, value, lat, lon) .values(deviceId, sensorType, lat, lon, value)
.build(); .build();
vertx.eventBus().request("db.query", query, req -> { vertx.eventBus().request("db.query", query, req -> {

View File

@@ -58,11 +58,13 @@ public class DatabaseVerticle extends AbstractVerticle {
JsonArray jsonArray = new JsonArray(); JsonArray jsonArray = new JsonArray();
for (Row row : rows) { for (Row row : rows) {
jsonArray.add(new JsonObject() jsonArray.add(new JsonObject()
.put("id", row.getInteger("id")) .put("deviceId", row.getInteger("deviceId"))
.put("sensor_type", row.getString("sensor_type")) .put("deviceName", row.getString("deviceName"))
.put("value", row.getFloat("value")) .put("measureId", row.getInteger("measureId"))
.put("sensorType", row.getString("sensorType"))
.put("lat", row.getFloat("lat")) .put("lat", row.getFloat("lat"))
.put("lon", row.getFloat("lon")) .put("lon", row.getFloat("lon"))
.put("value", row.getFloat("value"))
.put("timestamp", row.getLocalDateTime("timestamp").toString()) .put("timestamp", row.getLocalDateTime("timestamp").toString())
); );
} }

View File

@@ -1,2 +1,2 @@
/META-INF/
/net/ /net/
/META-INF/