database refactor
This commit is contained in:
@@ -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() + ";";
|
||||
}
|
||||
}
|
||||
@@ -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 -> {
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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())
|
||||
);
|
||||
}
|
||||
|
||||
2
backend/vertx/target/classes/.gitignore
vendored
2
backend/vertx/target/classes/.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
/META-INF/
|
||||
/net/
|
||||
/META-INF/
|
||||
|
||||
Reference in New Issue
Block a user