Ajout de la gestion des users et des catégories dans la partie admin
This commit is contained in:
parent
72d3211d5e
commit
40eb0c207c
@ -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);
|
||||
|
||||
@ -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,8 +51,15 @@ 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")
|
||||
|
||||
@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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,9 +50,17 @@ function FormNewObject({ isAdmin }) {
|
||||
}
|
||||
}
|
||||
useEffect(() => {
|
||||
axios.get(`${API_BASE_URL}/getCategories`).then((response) => {
|
||||
axios
|
||||
.get(`${API_BASE_URL}/getCategories`)
|
||||
.then((response) => {
|
||||
if (response.data.length === 0) {
|
||||
console.warn("Aucune catégorie disponible.");
|
||||
} else {
|
||||
setCategorie(response.data);
|
||||
console.log(response.data);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Erreur lors de la récupération des catégories :", error);
|
||||
});
|
||||
}, []);
|
||||
function resetForm() {
|
||||
@ -151,7 +159,7 @@ function FormNewObject({ isAdmin }) {
|
||||
disabled={verif}
|
||||
>
|
||||
<option value="">-- Sélectionner un type --</option>
|
||||
{categorie.map((cat, index) => (
|
||||
{categorie&&categorie.map((cat, index) => (
|
||||
<option key={index} value={cat}>
|
||||
{cat}
|
||||
</option>
|
||||
|
||||
@ -90,6 +90,17 @@ function Header() {
|
||||
</Link>
|
||||
</li>
|
||||
)}
|
||||
{(user?.role === "admin")&&(
|
||||
<li>
|
||||
<Link
|
||||
to="/dashboard"
|
||||
onClick={() => setIsMenuOpen(false)}
|
||||
className="text-gray-600 hover:text-indigo-600"
|
||||
>
|
||||
Administration
|
||||
</Link>
|
||||
</li>
|
||||
)}
|
||||
<li className="sm:hidden">
|
||||
<Link
|
||||
to="/profil"
|
||||
|
||||
@ -6,7 +6,7 @@ import AddObject from "../Gestion/AddObject.jsx";
|
||||
import FormNewObject from "../../components/FormNewObject.jsx";
|
||||
|
||||
function AdminObjet() {
|
||||
const [categories, setCategories] = useState(["Catégorie 1", "Catégorie 2"]);
|
||||
const [categories, setCategories] = useState();
|
||||
const [newCategory, setNewCategory] = useState("");
|
||||
const [objects, setObjects] = useState([]);
|
||||
|
||||
@ -19,14 +19,57 @@ function AdminObjet() {
|
||||
const handleAddCategory = () => {
|
||||
const trimmed = newCategory.trim();
|
||||
if (trimmed !== "" && !categories.includes(trimmed)) {
|
||||
axios
|
||||
.post(`${API_BASE_URL}/addCategories`, { name: trimmed })
|
||||
.then((response) => {
|
||||
console.log("Catégorie ajoutée :", response.data);
|
||||
setCategories([...categories, trimmed]);
|
||||
setNewCategory("");
|
||||
window.location.reload();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Erreur lors de l'ajout de la catégorie :", error);
|
||||
});
|
||||
}
|
||||
};
|
||||
const handleDeleteCategory = (categoryToDelete) => {
|
||||
const confirmation = window.confirm(
|
||||
`Êtes-vous sûr de vouloir supprimer la catégorie "${categoryToDelete}" ? Cette action pourrait impacter des objets.`
|
||||
);
|
||||
|
||||
if (confirmation) {
|
||||
setCategories(categories.filter((cat) => cat !== categoryToDelete));
|
||||
axios
|
||||
.post(`${API_BASE_URL}/deleteCategories`, { name: categoryToDelete })
|
||||
.then((response) => {
|
||||
console.log("Catégorie supprimée :", response.data);
|
||||
window.location.reload();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(
|
||||
"Erreur lors de la suppression de la catégorie :",
|
||||
error
|
||||
);
|
||||
});
|
||||
} else {
|
||||
console.log("Suppression annulée.");
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
axios
|
||||
.get(`${API_BASE_URL}/getCategories`)
|
||||
.then((response) => {
|
||||
if (response.data.length === 0) {
|
||||
console.warn("Aucune catégorie disponible.");
|
||||
} else {
|
||||
setCategories(response.data);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Erreur lors de la récupération des catégories :", error);
|
||||
});
|
||||
}, []);
|
||||
const [name, setName] = useState("");
|
||||
const [description, setDescription] = useState("");
|
||||
const [type, setType] = useState("");
|
||||
@ -127,7 +170,8 @@ function AdminObjet() {
|
||||
</button>
|
||||
</div>
|
||||
<ul>
|
||||
{categories.map((cat, index) => (
|
||||
{categories &&
|
||||
categories.map((cat, index) => (
|
||||
<li
|
||||
key={index}
|
||||
className="flex justify-between items-center border-b border-gray-200 py-2"
|
||||
|
||||
@ -34,14 +34,19 @@ function User() {
|
||||
}, []);
|
||||
const handleDeleteUser = (userId) => {
|
||||
const user = users.find((u) => u.id === userId);
|
||||
|
||||
if (user) {
|
||||
const confirmation = window.confirm(
|
||||
`Êtes-vous sûr de vouloir supprimer l'utilisateur "${user.name}" ? Cette action pourrait entraîner la suppression des objets associés.`
|
||||
);
|
||||
if (confirmation) {
|
||||
axios
|
||||
.post(`${API_BASE_URL}/deleteUser`, {
|
||||
id: userId,
|
||||
})
|
||||
.then((response) => {
|
||||
alert("L'utilisateur à bien été supprimé !");
|
||||
console.log("L'utilisateur à été supprimé :", response.data);
|
||||
alert("L'utilisateur a bien été supprimé !");
|
||||
console.log("L'utilisateur a été supprimé :", response.data);
|
||||
window.location.reload();
|
||||
})
|
||||
.catch((error) => {
|
||||
@ -50,9 +55,14 @@ function User() {
|
||||
error
|
||||
);
|
||||
});
|
||||
|
||||
logAction(user.name, "Utilisateur supprimé");
|
||||
}
|
||||
|
||||
setUsers(users.filter((u) => u.id !== userId));
|
||||
} else {
|
||||
console.log("Suppression annulée");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const handleChangeAccessLevel = (userId, newLevel) => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user