From b10408f4430d18e3bd1ea2359e3cb2a834d5967b Mon Sep 17 00:00:00 2001 From: Mathis Date: Thu, 10 Apr 2025 22:08:41 +0200 Subject: [PATCH] Ajout du backend sur les users --- .../com/example/starter/MainVerticle.java | 2 + .../java/com/example/starter/SetUser.java | 37 ++- Front-end/src/pages/Admin/Dashboard.jsx | 130 ++++------- Front-end/src/pages/Admin/User.jsx | 219 +++++++++--------- 4 files changed, 188 insertions(+), 200 deletions(-) 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 052e187..8492e6e 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -54,6 +54,8 @@ public class MainVerticle extends AbstractVerticle { router.post("/deleteObject").handler(setObjects::deleteObject); router.get("/users").handler(queryUsers::getUsers); router.post("/setUserPoints").handler(setUser::setUserPoints); + router.post("/deleteUser").handler(setUser::deleteUser); + // 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/SetUser.java b/Back-end/src/main/java/com/example/starter/SetUser.java index 9d104fd..b2ade2a 100644 --- a/Back-end/src/main/java/com/example/starter/SetUser.java +++ b/Back-end/src/main/java/com/example/starter/SetUser.java @@ -25,7 +25,7 @@ public class SetUser { databaseService.pool .preparedQuery( "UPDATE users SET points=? WHERE id=?") - .execute(Tuple.of(points,id)) + .execute(Tuple.of(points, id)) .onFailure(e -> { System.err.println("Erreur de récupération de la BDD :" + e.getMessage()); context.response() @@ -41,8 +41,41 @@ public class SetUser { } context.response() .putHeader("content-type", "application/json: charset=UTF-8") - .end(new JsonObject().put("success", "Les points de l'utilisateur ont bien été mis à jour").encode()); + .end(new JsonObject().put("success", "Les points de l'utilisateur ont bien été mis à jour") + .encode()); return; }); } + public void deleteUser(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 users 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", "Utilisateur non trouvé").encode()); + return; + } + context.response() + .putHeader("content-type","application/json: charset=UTF-8") + .end(new JsonObject().put("success", "L'utilisateur à bien été supprimé").encode()); + return; + }); + + } } diff --git a/Front-end/src/pages/Admin/Dashboard.jsx b/Front-end/src/pages/Admin/Dashboard.jsx index 8056bc8..3e29bcf 100644 --- a/Front-end/src/pages/Admin/Dashboard.jsx +++ b/Front-end/src/pages/Admin/Dashboard.jsx @@ -1,51 +1,8 @@ -import React, { useState,useEffect } from "react"; +import React, { useState, useEffect } from "react"; import Sidebar from "./sidebar.jsx"; import { API_BASE_URL } from "../../config.js"; import axios from "axios"; - -const dashboardStyles = { - mainContent: { - flexGrow: 1, - padding: "20px", - }, - summaryContainer: { - display: "flex", - gap: "20px", - marginBottom: "20px", - }, - summaryCard: { - background: "#f4f4f4", - padding: "20px", - flex: 1, - borderRadius: "5px", - textAlign: "center", - }, - table: { - width: "100%", - borderCollapse: "collapse", - }, - tableHeader: { - padding: "10px", - border: "1px solid #ccc", - backgroundColor: "#f4f4f4", - }, - tableCell: { - padding: "10px", - border: "1px solid #ccc", - textAlign: "left", - }, - viewMoreButton: { - marginTop: "10px", - padding: "10px 15px", - backgroundColor: "#007bff", - color: "#fff", - border: "none", - borderRadius: "5px", - cursor: "pointer", - }, -}; - function Dashboard() { const [users, setUsers] = useState([]); const [logs, setLogs] = useState([ @@ -62,64 +19,67 @@ function Dashboard() { timestamp: new Date().toLocaleString(), }, ]); + useEffect(() => { axios.get(`${API_BASE_URL}/users`).then((response) => { setUsers(response.data); }); }, []); + return ( -
+
-
-

Dashboard

-
-
-

Total Users

-

{users.length}

+
+

Dashboard

+ +
+
+

Total Users

+

{users.length}

-
-

Dernier Log

+
+

Dernier Log

{logs.length > 0 ? ( -

- {logs[logs.length - 1].username} -{" "} - {logs[logs.length - 1].action} +

+ {logs[logs.length - 1].username} - {logs[logs.length - 1].action}

) : ( -

Aucun log

+

Aucun log

)}
-

Aperçu des Utilisateurs

- - - - - - - - - - {users.slice(0, 5).map((user) => ( - - - - +

Aperçu des Utilisateurs

+
+
UsernameEmailNiveau d'accès
{user.name}{user.email}{user.role}
+ + + + + - ))} - {users.length === 0 && ( - - - - )} - -
UsernameEmailNiveau d'accès
- Aucun utilisateur disponible -
- {/* Bouton pour accéder à la page complète */} + + + {users.slice(0, 5).map((user) => ( + + {user.name} + {user.email} + {user.role} + + ))} + {users.length === 0 && ( + + + Aucun utilisateur disponible + + + )} + + +
{/* Tableau des utilisateurs */} - +
- - - - - + + + + + {users.map((user) => ( - - - + + - - @@ -240,22 +231,24 @@ function User() {
NomEmailNiveau d'accèsPointsActionsNomEmailNiveau d'accèsPointsActions
{user.name}{user.email} + {user.name}{user.email} {/* Menu déroulant pour changer le niveau d'accès */} - {user.points} + {/* Input et bouton pour ajuster les points */} setPointsInput({ ...pointsInput, @@ -211,27 +210,19 @@ function User() { } /> + {/* Bouton de suppression */}
{/* Tableau des logs */} -
-

Historique des connexions et journal des logs

- +
+

+ Historique des connexions et journal des logs{" "} +

+
- - - + + + {logs.map((log) => ( - - - + + + ))}
NomActionTimestampNomActionTimestamp
{log.name}{log.action}{log.timestamp}{log.name}{log.action}{log.timestamp}