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 fa171c3..988c70e 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -64,6 +64,9 @@ public class MainVerticle extends AbstractVerticle { router.post("/changePassword").handler(setUser::changeUserPassword); router.post("/publicUser").handler(queryUsers::getPublicUser); router.get("/getCategories").handler(queryObjects::getCategories); + router.post("/addCategories").handler(setObjects::newCategorie); + router.post("/deleteCategories").handler(setObjects::deleteCategories); + // 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/QueryObjects.java b/Back-end/src/main/java/com/example/starter/QueryObjects.java index abc5bca..61d60dc 100644 --- a/Back-end/src/main/java/com/example/starter/QueryObjects.java +++ b/Back-end/src/main/java/com/example/starter/QueryObjects.java @@ -42,7 +42,7 @@ public class QueryObjects { public void getCategories(RoutingContext context) { databaseService.pool - .query("SELECT DISTINCT type FROM weather_objects;") + .query("SELECT name FROM categories;") .execute() .onFailure(e -> { System.err.println("Erreur de récupération de la BDD :" + e.getMessage()); @@ -51,9 +51,16 @@ public class QueryObjects { .end(new JsonObject().put("error", "Erreur de récupération de la BDD").encode()); }) .onSuccess(rows -> { + if (!rows.iterator().hasNext()) { + context.response() + .setStatusCode(404) + .end(new JsonObject().put("error", "Aucun type trouvé dans la base de données").encode()); + return; + } + JsonArray types = new JsonArray(); - rows.forEach(row -> types.add(row.getString("type"))); - + rows.forEach(row -> types.add(row.getString("name"))); + context.response() .putHeader("content-type", "application/json; charset=UTF-8") .end(types.encode()); @@ -64,8 +71,8 @@ public class QueryObjects { JsonObject body = context.body().asJsonObject(); if (body == null) { context.response() - .setStatusCode(400) - .end(new JsonObject().put("error", "Corps de la requête manquant").encode()); + .setStatusCode(400) + .end(new JsonObject().put("error", "Corps de la requête manquant").encode()); return; } String id = body.getString("id"); @@ -98,7 +105,7 @@ public class QueryObjects { Boolean shouldUpdatePoints = body.getBoolean("shouldUpdatePoints", false); if (Boolean.TRUE.equals(shouldUpdatePoints) && idUser != null) { - setUser.updateUserPoints(Integer.parseInt(idUser), 1); + setUser.updateUserPoints(Integer.parseInt(idUser), 1); } context.response() .putHeader("content-type", "application/json: charset=UTF-8") diff --git a/Back-end/src/main/java/com/example/starter/SetObjects.java b/Back-end/src/main/java/com/example/starter/SetObjects.java index ad16b15..dc13a66 100644 --- a/Back-end/src/main/java/com/example/starter/SetObjects.java +++ b/Back-end/src/main/java/com/example/starter/SetObjects.java @@ -60,6 +60,38 @@ public class SetObjects { }); } + public void deleteCategories(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; + } + String name = body.getString("name"); + databaseService.pool + .preparedQuery("DELETE FROM categories WHERE name=?") + .execute(Tuple.of(name)) + .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", "Catégorie non trouvé").encode()); + return; + } + context.response() + .putHeader("content-type", "application/json: charset=UTF-8") + .end(new JsonObject().put("success", "La catégorie à bien été supprimé").encode()); + return; + }); + } + public void deleteObject(RoutingContext context) { JsonObject body = context.body().asJsonObject(); if (body == null) { @@ -137,4 +169,39 @@ public class SetObjects { }); } + public void newCategorie(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; + } + String name = body.getString("name"); + + databaseService.pool + .preparedQuery( + "INSERT INTO categories (name) VALUES (?)") + .execute(Tuple.of(name)) + .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", "Objet non trouvé").encode()); + return; + } + + context.response() + .putHeader("content-type", "application/json: charset=UTF-8") + .end(new JsonObject().put("success", "La catégorie à bien été ajouté").encode()); + return; + }); + } + } diff --git a/Front-end/src/components/FormNewObject.jsx b/Front-end/src/components/FormNewObject.jsx index 8d138f1..10c93c8 100644 --- a/Front-end/src/components/FormNewObject.jsx +++ b/Front-end/src/components/FormNewObject.jsx @@ -6,7 +6,7 @@ import { useAuth } from "../AuthContext"; function FormNewObject({ isAdmin }) { const { user } = useAuth(); - const [categorie, setCategorie] = useState({}); + const [categorie, setCategorie] = useState(); const [description, setDescription] = useState(""); const [type, setType] = useState(""); const [location, setLocalisation] = useState(""); @@ -50,10 +50,18 @@ function FormNewObject({ isAdmin }) { } } useEffect(() => { - axios.get(`${API_BASE_URL}/getCategories`).then((response) => { - setCategorie(response.data); - console.log(response.data); - }); + axios + .get(`${API_BASE_URL}/getCategories`) + .then((response) => { + if (response.data.length === 0) { + console.warn("Aucune catégorie disponible."); + } else { + setCategorie(response.data); + } + }) + .catch((error) => { + console.error("Erreur lors de la récupération des catégories :", error); + }); }, []); function resetForm() { setNom(""); @@ -151,7 +159,7 @@ function FormNewObject({ isAdmin }) { disabled={verif} > - {categorie.map((cat, index) => ( + {categorie&&categorie.map((cat, index) => ( diff --git a/Front-end/src/components/Header.jsx b/Front-end/src/components/Header.jsx index 8b1773c..54b2a34 100644 --- a/Front-end/src/components/Header.jsx +++ b/Front-end/src/components/Header.jsx @@ -90,6 +90,17 @@ function Header() { )} + {(user?.role === "admin")&&( +