package com.example.starter; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.RowSet; import io.vertx.sqlclient.Tuple; import java.time.format.DateTimeFormatter; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; public class QueryWeatherData { private DatabaseService databaseService; public QueryWeatherData(DatabaseService dtbS) { this.databaseService = dtbS; } public void getWindInfos(RoutingContext context) { String id = context.request().getParam("id"); if (id == null) { context.response() .setStatusCode(400) .end(new JsonObject().put("error", "Paramètre 'id' manquant").encode()); return; } databaseService.pool .preparedQuery("SELECT wind_speed,wind_direction,timestamp FROM weather_data WHERE station_id=?") .execute(Tuple.of(Integer.parseInt(id))) .onFailure(e -> { System.err.println("Erreur de récupération de la BDD :" + e.getMessage()); context.response() .setStatusCode(500) .end(new JsonObject().put("Erreur", "Erreur de récupération de la BDD").encode()); }) .onSuccess(rows -> { if (rows.size() == 0) { context.response() .setStatusCode(404) .end(new JsonObject().put("error", "Objet non trouvé").encode()); return; } context.response() .putHeader("content-type", "application/json: charset=UTF-8") .end((convertRowsToJson(rows)).encode()); }); } public void getMeteoInfos(RoutingContext context) { String id = context.request().getParam("id"); if (id == null) { context.response() .setStatusCode(400) .end(new JsonObject().put("error", "Paramètre 'id' manquant").encode()); return; } databaseService.pool .preparedQuery("SELECT temperature,humidity,pressure,timestamp FROM weather_data WHERE station_id=?") .execute(Tuple.of(Integer.parseInt(id))) .onFailure(e -> { System.err.println("Erreur de récupération de la BDD :" + e.getMessage()); context.response() .setStatusCode(500) .end(new JsonObject().put("Erreur", "Erreur de récupération de la BDD").encode()); }) .onSuccess(rows -> { if (rows.size() == 0) { context.response() .setStatusCode(404) .end(new JsonObject().put("error", "Objet non trouvé").encode()); return; } context.response() .putHeader("content-type", "application/json: charset=UTF-8") .end((convertRowsToJson(rows)).encode()); }); } public void getRangeData(RoutingContext context){ String id= context.request().getParam("id"); if(id==null){ context.response() .setStatusCode(400) .end(new JsonObject().put("error","Paramètre 'id' manquant").encode()); return; } databaseService.pool .preparedQuery("SELECT temperature_min,temperature_max,pressure_min,pressure_max,humidity_min,humidity_max FROM range_data WHERE station_id=?") .execute(Tuple.of(Integer.parseInt(id))) .onFailure(e->{ System.err.println("Erreur de récupération de la BDD: "+e.getMessage()); context.response() .setStatusCode(500) .end(new JsonObject().put("error","Erreur de récupération de la BDD").encode()); return; }) .onSuccess(rows->{ if(rows.size() == 0){ context.response() .setStatusCode(404) .end(new JsonObject().put("error","Objet non trouvé").encode()); return; } context.response() .putHeader("content-type","application/json:charset=UTF-8") .end((convertRowsToJson(rows)).encode()); }); } private JsonArray convertRowsToJson(RowSet rows) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); JsonArray jsonArray = new JsonArray(); for (Row row : rows) { JsonObject jsonObject = new JsonObject(); for (int i = 0; i < row.size(); i++) { String column = row.getColumnName(i); if(column.compareTo("timestamp") == 0){ jsonObject.put("timestamp",row.getLocalDateTime("timestamp").format(formatter)); }else{ jsonObject.put(column, row.getValue(column)); } } jsonArray.add(jsonObject); } return jsonArray; } }