diff --git a/Back-end/src/main/java/com/example/starter/MainVerticle.java b/Back-end/src/main/java/com/example/starter/MainVerticle.java index 839e041..1ac4def 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -75,6 +75,7 @@ public class MainVerticle extends AbstractVerticle { router.post("/deleteCategories").handler(setObjects::deleteCategories); router.post("/requestDeleteObject").handler(RequestDeleteObject::deleteObject); router.get("/getDemandeSuppression").handler(DeleteObject::getAllDeletionRequests); + router.post("/reject").handler(RequestDeleteObject::rejectDemande); // Routes d'authentification router.post("/signup").handler(authHandler::handleSignup); router.post("/login").handler(authHandler::handleLogin); diff --git a/Back-end/src/main/java/com/example/starter/QueryDeleteObject.java b/Back-end/src/main/java/com/example/starter/QueryDeleteObject.java index 4a030d1..5df7d22 100644 --- a/Back-end/src/main/java/com/example/starter/QueryDeleteObject.java +++ b/Back-end/src/main/java/com/example/starter/QueryDeleteObject.java @@ -13,53 +13,71 @@ public class QueryDeleteObject { public void deleteObject(RoutingContext context) { JsonObject body = context.body().asJsonObject(); - + if (body == null) { - context.response().setStatusCode(400).end(new JsonObject().put("error", "Requête invalide").encode()); + context.response().setStatusCode(400) + .end(new JsonObject().put("error", "Requête invalide").encode()); return; } - + Integer objectId = body.getInteger("object_id"); Integer userId = body.getInteger("requested_by"); - - + if (objectId == null || userId == null) { - context.response().setStatusCode(400).end(new JsonObject().put("error", "Champs manquants").encode()); + context.response().setStatusCode(400) + .end(new JsonObject().put("error", "Champs manquants").encode()); return; } - + String checkQuery = "SELECT id FROM weather_objects WHERE id = ?"; - + databaseService.pool.preparedQuery(checkQuery).execute(Tuple.of(objectId), res -> { if (res.failed()) { - res.cause().printStackTrace(); + res.cause().printStackTrace(); context.response().setStatusCode(500) - .end(new JsonObject().put("error", "Erreur base de données").encode()); + .end(new JsonObject().put("error", "Erreur base de données").encode()); return; } - + if (res.result().rowCount() == 0) { - context.response().setStatusCode(404).end(new JsonObject().put("error", "Objet non trouvé").encode()); + context.response().setStatusCode(404) + .end(new JsonObject().put("error", "Objet non trouvé").encode()); return; } - + String checkDuplicate = "SELECT 1 FROM deletion_requests WHERE object_id = ? AND requested_by = ?"; - String insertQuery = "INSERT INTO deletion_requests (object_id, requested_by) VALUES (?, ?)"; - - databaseService.pool.preparedQuery(insertQuery).execute(Tuple.of(objectId, userId), insertRes -> { - if (insertRes.succeeded()) { - context.response().setStatusCode(200) - .end(new JsonObject().put("message", "Demande envoyée").encode()); - } else { - insertRes.cause().printStackTrace(); + + databaseService.pool.preparedQuery(checkDuplicate).execute(Tuple.of(objectId, userId), duplicateCheck -> { + if (duplicateCheck.failed()) { + duplicateCheck.cause().printStackTrace(); context.response().setStatusCode(500) - .end(new JsonObject().put("error", "Erreur insertion").encode()); + .end(new JsonObject().put("error", "Erreur vérification duplication").encode()); + return; } + + if (duplicateCheck.result().rowCount() > 0) { + context.response().setStatusCode(409) + .end(new JsonObject().put("error", "Demande déjà existante").encode()); + return; + } + + String insertQuery = "INSERT INTO deletion_requests (object_id, requested_by) VALUES (?, ?)"; + + databaseService.pool.preparedQuery(insertQuery).execute(Tuple.of(objectId, userId), insertRes -> { + if (insertRes.succeeded()) { + context.response().setStatusCode(200) + .end(new JsonObject().put("message", "Demande envoyée").encode()); + } else { + insertRes.cause().printStackTrace(); + context.response().setStatusCode(500) + .end(new JsonObject().put("error", "Erreur insertion").encode()); + } + }); }); }); - } + public void getAllDeletionRequests(RoutingContext context) { String query = "SELECT * FROM deletion_requests"; @@ -89,4 +107,38 @@ public class QueryDeleteObject { }); } + public void rejectDemande(RoutingContext context){ + JsonObject body = context.body().asJsonObject(); + if (body == null) { + context.response() + .setStatusCode(400) + .end(new JsonObject().put("error", "Corps de la requête manquant").encode()); + return; + } + Integer id = body.getInteger("id"); + + + databaseService.pool + .preparedQuery("DELETE FROM deletion_requests WHERE id=?") + .execute(Tuple.of(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()); + }) + .onSuccess(rows -> { + if (rows.rowCount() == 0) { + context.response() + .setStatusCode(404) + .end(new JsonObject().put("error", "Demande non trouvé").encode()); + return; + } + context.response() + .putHeader("content-type", "application/json: charset=UTF-8") + .end(new JsonObject().put("success", "La demande à bien été supprimé").encode()); + return; + }); + } + } diff --git a/Front-end/src/pages/Admin/AdminObjet.jsx b/Front-end/src/pages/Admin/AdminObjet.jsx index 3aebe06..78dfd95 100644 --- a/Front-end/src/pages/Admin/AdminObjet.jsx +++ b/Front-end/src/pages/Admin/AdminObjet.jsx @@ -117,18 +117,36 @@ function AdminObjet() { setVerif(true); } }; + const handleReject =(id) => { + axios + .post(`${API_BASE_URL}/reject`, { + id, + }) + .then((response) => { + setMessRequete("La demande à bien été supprimé !"); + console.log("La demande à été supprimée :", response.data); + window.location.reload(); + }) + .catch((error) => { + setMessRequete( + "Il y a eu une erreur dans la suppression de la demande !" + ); + console.error("Erreur lors de la suppression de la demande :", error); + }); + } + const handleDeleteObject = (id) => { axios .post(`${API_BASE_URL}/deleteObject`, { id, }) .then((response) => { - setMessRequete("Votre objet à bien été supprimé !"); + alert("Votre objet à bien été supprimé !"); console.log("Votre objet à été supprimé :", response.data); window.location.reload(); }) .catch((error) => { - setMessRequete( + alert( "Il y a eu une erreur dans la suppression de votre objet !" ); console.error("Erreur lors de la suppression de l'objet :", error); @@ -143,7 +161,7 @@ function AdminObjet() { let fieldB = b[sortCriteria] || ""; return fieldA.localeCompare(fieldB); }); - + return (
diff --git a/Front-end/src/pages/Admin/Dashboard.jsx b/Front-end/src/pages/Admin/Dashboard.jsx index 419e07e..71f7e16 100644 --- a/Front-end/src/pages/Admin/Dashboard.jsx +++ b/Front-end/src/pages/Admin/Dashboard.jsx @@ -66,9 +66,6 @@ function Dashboard() { setAdminObjects(response.data); }); - axios.get(`${API_BASE_URL}/demandeSuppression`).then((response) => { - setRequestDeleteObject(response.data); - }); }, []); const [adminObjects, setAdminObjects] = useState([]); diff --git a/Front-end/src/pages/Home.jsx b/Front-end/src/pages/Home.jsx index 70627df..d6917bf 100644 --- a/Front-end/src/pages/Home.jsx +++ b/Front-end/src/pages/Home.jsx @@ -82,7 +82,7 @@ function EnhancedWeatherHome() { }; const formatHeure = (h) => { - const heureFormatee = (h % 24).toString().padStart(2, "0"); // 0 → 00, 3 → 03, etc. + const heureFormatee = (h % 24).toString().padStart(2, "0"); return `${heureFormatee}:00`; }; const hourlyForecast = [