package com.example.starter; import at.favre.lib.crypto.bcrypt.BCrypt; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Tuple; public class SetUser { private DatabaseService databaseService; public SetUser(DatabaseService ddbs) { this.databaseService = ddbs; } public void updateUserPoints(Integer userId, Integer points) { databaseService.pool .preparedQuery("UPDATE users SET points=points+? WHERE id=?") .execute(Tuple.of(points, userId)) .onFailure(e -> { System.err.println("Erreur de mise à jour des points :" + e.getMessage()); }) .onSuccess(rows -> { if (rows.rowCount() > 0) { System.out.println("Points de l'utilisateur mis à jour avec succès"); } else { System.out.println("Utilisateur non trouvé pour la mise à jour des points"); } }); } public void changeUserPassword(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"); String oldPassword = body.getString("oldPassword"); String newPassword = body.getString("newPassword"); databaseService.pool .preparedQuery("SELECT password 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; } String currentPassword = rows.iterator().next().getString("password"); BCrypt.Result verification = BCrypt.verifyer().verify(oldPassword.toCharArray(), currentPassword); if (!verification.verified) { context.response() .setStatusCode(401) .end(new JsonObject().put("error", "Ancien mot de passe incorrect").encode()); return; } String hashedPassword = BCrypt.withDefaults().hashToString(12, newPassword.toCharArray()); databaseService.pool .preparedQuery("UPDATE users SET password=? WHERE id=?") .execute(Tuple.of(hashedPassword, id)) .onFailure(e -> { System.err.println("Erreur lors de la mise à jour du mot de passe :" + e.getMessage()); context.response() .setStatusCode(500) .end(new JsonObject() .put("error", "Erreur lors de la mise à jour du mot de passe") .encode()); }) .onSuccess(updateRows -> { context.response() .putHeader("content-type", "application/json: charset=UTF-8") .end(new JsonObject().put("success", "Le mot de passe a bien été mis à jour") .encode()); }); }); } public void updateUserProfile(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"); String name = body.getString("name"); String surname = body.getString("surname"); String pseudo = body.getString("pseudo"); databaseService.pool .preparedQuery("UPDATE users SET name=?, surname=?, pseudo=? WHERE id=?") .execute(Tuple.of(name, surname,pseudo, 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", "Les informations de l'utilisateur ont bien été mises à jour") .encode()); return; }); } public void setUserPoints(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"); Integer points = body.getInteger("points"); databaseService.pool .preparedQuery( "UPDATE users SET points=? WHERE id=?") .execute(Tuple.of(points, 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.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", "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; }); } }