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