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 {
private StringBuilder query;
private List<String> 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<String> column, Optional<String> 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<Integer> limit) {
limit.ifPresent(value -> query.append("LIMIT ").append(value).append(" "));
public QueryBuilder limit(Optional<Integer> 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() + ";";
}
}

View File

@@ -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<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"))
@@ -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<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 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 -> {
@@ -115,7 +128,8 @@ public class ApiVerticle extends AbstractVerticle {
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 -> {

View File

@@ -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())
);
}

View File

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