Task 1.7 - Ajout PasswordChangeDTO

- Création de PasswordChangeDTO pour les changements de mot de passe
- Validation Jakarta avec @NotBlank et @Size
- Documentation Javadoc complète en français
- Méthodes utilitaires pour validation et cohérence
- Support pour les endpoints de changement de mot de passe
This commit is contained in:
dahoud
2025-10-06 22:03:32 +00:00
parent f77776820e
commit 9926982eae

View File

@@ -0,0 +1,188 @@
package com.gbcm.server.api.dto.auth;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
/**
* DTO pour les demandes de changement de mot de passe.
* Utilisé lorsqu'un utilisateur authentifié souhaite changer son mot de passe.
*
* @author GBCM Development Team
* @version 1.0
* @since 1.0
*/
@Schema(description = "Demande de changement de mot de passe")
public class PasswordChangeDTO {
/**
* Mot de passe actuel de l'utilisateur.
* Obligatoire pour vérifier l'identité avant le changement.
*/
@Schema(description = "Mot de passe actuel de l'utilisateur",
example = "ancienMotDePasse123",
required = true)
@JsonProperty("currentPassword")
@NotBlank(message = "Le mot de passe actuel est obligatoire")
private String currentPassword;
/**
* Nouveau mot de passe choisi par l'utilisateur.
* Doit respecter la politique de sécurité des mots de passe.
*/
@Schema(description = "Nouveau mot de passe",
example = "nouveauMotDePasse123",
required = true)
@JsonProperty("newPassword")
@NotBlank(message = "Le nouveau mot de passe est obligatoire")
@Size(min = 8, max = 100, message = "Le nouveau mot de passe doit contenir entre 8 et 100 caractères")
private String newPassword;
/**
* Confirmation du nouveau mot de passe.
* Doit être identique au nouveau mot de passe.
*/
@Schema(description = "Confirmation du nouveau mot de passe",
example = "nouveauMotDePasse123",
required = true)
@JsonProperty("confirmPassword")
@NotBlank(message = "La confirmation du mot de passe est obligatoire")
@Size(min = 8, max = 100, message = "La confirmation doit contenir entre 8 et 100 caractères")
private String confirmPassword;
/**
* Constructeur par défaut.
*/
public PasswordChangeDTO() {}
/**
* Constructeur avec tous les paramètres.
*
* @param currentPassword le mot de passe actuel
* @param newPassword le nouveau mot de passe
* @param confirmPassword la confirmation du nouveau mot de passe
*/
public PasswordChangeDTO(String currentPassword, String newPassword, String confirmPassword) {
this.currentPassword = currentPassword;
this.newPassword = newPassword;
this.confirmPassword = confirmPassword;
}
/**
* Retourne le mot de passe actuel.
*
* @return le mot de passe actuel
*/
public String getCurrentPassword() {
return currentPassword;
}
/**
* Définit le mot de passe actuel.
*
* @param currentPassword le mot de passe actuel à définir
*/
public void setCurrentPassword(String currentPassword) {
this.currentPassword = currentPassword;
}
/**
* Retourne le nouveau mot de passe.
*
* @return le nouveau mot de passe
*/
public String getNewPassword() {
return newPassword;
}
/**
* Définit le nouveau mot de passe.
*
* @param newPassword le nouveau mot de passe à définir
*/
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
/**
* Retourne la confirmation du nouveau mot de passe.
*
* @return la confirmation du nouveau mot de passe
*/
public String getConfirmPassword() {
return confirmPassword;
}
/**
* Définit la confirmation du nouveau mot de passe.
*
* @param confirmPassword la confirmation à définir
*/
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
/**
* Vérifie si le nouveau mot de passe et sa confirmation correspondent.
*
* @return true si les mots de passe correspondent, false sinon
*/
public boolean isPasswordConfirmed() {
return newPassword != null && newPassword.equals(confirmPassword);
}
/**
* Vérifie si tous les champs obligatoires sont remplis.
*
* @return true si tous les champs sont remplis, false sinon
*/
public boolean isComplete() {
return currentPassword != null && !currentPassword.trim().isEmpty() &&
newPassword != null && !newPassword.trim().isEmpty() &&
confirmPassword != null && !confirmPassword.trim().isEmpty();
}
/**
* Représentation textuelle de l'objet (sans les mots de passe pour la sécurité).
*
* @return une chaîne représentant l'objet
*/
@Override
public String toString() {
return "PasswordChangeDTO{" +
"hasCurrentPassword=" + (currentPassword != null && !currentPassword.isEmpty()) +
", hasNewPassword=" + (newPassword != null && !newPassword.isEmpty()) +
", hasConfirmPassword=" + (confirmPassword != null && !confirmPassword.isEmpty()) +
", passwordsMatch=" + isPasswordConfirmed() +
'}';
}
/**
* Vérifie l'égalité avec un autre objet.
*
* @param obj l'objet à comparer
* @return true si les objets sont égaux, false sinon
*/
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
PasswordChangeDTO that = (PasswordChangeDTO) obj;
return java.util.Objects.equals(currentPassword, that.currentPassword) &&
java.util.Objects.equals(newPassword, that.newPassword) &&
java.util.Objects.equals(confirmPassword, that.confirmPassword);
}
/**
* Calcule le code de hachage de l'objet.
*
* @return le code de hachage
*/
@Override
public int hashCode() {
return java.util.Objects.hash(currentPassword, newPassword, confirmPassword);
}
}