diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..170b576
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..dda4560
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f261d12
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ContaminUS.iml b/ContaminUS.iml
new file mode 100644
index 0000000..64f8ad0
--- /dev/null
+++ b/ContaminUS.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/common/ConfigManager.java b/backend/vertx/src/main/java/net/miarma/contaminus/common/ConfigManager.java
index cbafdf5..98086bf 100644
--- a/backend/vertx/src/main/java/net/miarma/contaminus/common/ConfigManager.java
+++ b/backend/vertx/src/main/java/net/miarma/contaminus/common/ConfigManager.java
@@ -57,9 +57,17 @@ public class ConfigManager {
}
}
- public String getProperty(String key) {
+ public String getStringProperty(String key) {
return config.getProperty(key);
}
+
+ public int getIntProperty(String key) {
+ return Integer.parseInt(config.getProperty(key));
+ }
+
+ public boolean getBooleanProperty(String key) {
+ return Boolean.parseBoolean(config.getProperty(key));
+ }
public void setProperty(String key, String value) {
config.setProperty(key, value);
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 03978e9..c40c9b7 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
@@ -13,13 +13,13 @@ public class DatabaseManager {
ConfigManager config = ConfigManager.getInstance();
JsonObject dbConfig = new JsonObject()
- .put("url", config.getProperty("db.protocol") + "//" +
- config.getProperty("db.host") + ":" +
- config.getProperty("db.port") + "/" +
- config.getProperty("db.name"))
- .put("user", config.getProperty("db.user"))
- .put("password", config.getProperty("db.pwd"))
- .put("max_pool_size", config.getProperty("db.poolSize"));
+ .put("url", config.getStringProperty("db.protocol") + "//" +
+ config.getStringProperty("db.host") + ":" +
+ config.getStringProperty("db.port") + "/" +
+ config.getStringProperty("db.name"))
+ .put("user", config.getStringProperty("db.user"))
+ .put("password", config.getStringProperty("db.pwd"))
+ .put("max_pool_size", config.getStringProperty("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
index c6f644e..c303ff1 100644
--- a/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java
+++ b/backend/vertx/src/main/java/net/miarma/contaminus/database/QueryBuilder.java
@@ -29,8 +29,9 @@ public class QueryBuilder {
return this;
}
- public QueryBuilder where(String condition) {
- conditions.add(condition);
+ public QueryBuilder where(String conditionsString, Object... values) {
+ conditionsString = conditionsString.replaceAll("\\?", "%s");
+ conditions.add(String.format(conditionsString, values));
return this;
}
diff --git a/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java b/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java
index f764286..99975fb 100644
--- a/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java
+++ b/backend/vertx/src/main/java/net/miarma/contaminus/server/ApiVerticle.java
@@ -1,83 +1,118 @@
package net.miarma.contaminus.server;
-import java.util.Optional;
-
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
-import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.eventbus.Message;
+import io.vertx.core.http.HttpMethod;
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.CorsHandler;
+import net.miarma.contaminus.common.ConfigManager;
import net.miarma.contaminus.common.Constants;
import net.miarma.contaminus.database.QueryBuilder;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+
public class ApiVerticle extends AbstractVerticle {
- @Override
- public void start(Promise startPromise) {
- Constants.LOGGER.info("🟢 Iniciando ApiVerticle...");
- Router router = Router.router(vertx);
- router.get(Constants.API_PREFIX + "/sensors").blockingHandler(this::getAllSensors);
+ private ConfigManager configManager = ConfigManager.getInstance();
+
+ @Override
+ public void start(Promise startPromise) {
+ Constants.LOGGER.info("🟢 Iniciando ApiVerticle...");
+ Router router = Router.router(vertx);
+
+ Set allowedHeaders = new HashSet<>();
+ allowedHeaders.add("x-requested-with");
+ allowedHeaders.add("Access-Control-Allow-Origin");
+ allowedHeaders.add("origin");
+ allowedHeaders.add("Content-Type");
+ allowedHeaders.add("accept");
+
+ Set allowedMethods = new HashSet<>();
+ allowedMethods.add(io.vertx.core.http.HttpMethod.GET);
+ allowedMethods.add(io.vertx.core.http.HttpMethod.POST);
+ allowedMethods.add(io.vertx.core.http.HttpMethod.OPTIONS);
+
+ router.route().handler(CorsHandler.create()
+ .addOrigin("http://"+configManager.getStringProperty("inet.host")+":"+configManager.getIntProperty("webserver.port"))
+ .allowCredentials(true)
+ .allowedHeaders(allowedHeaders)
+ .allowedMethods(allowedMethods));
+
+ 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"))
- );
- vertx.createHttpServer().requestHandler(router).listen(8081);
- startPromise.complete();
- }
-
- private void getAllSensors(RoutingContext context) {
- 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