Refactoring - Version stable
This commit is contained in:
@@ -140,6 +140,62 @@ public class MembreKeycloakSyncService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Active un membre dans Keycloak en lui assignant le rôle MEMBRE_ACTIF.
|
||||
* Appelé après MembreService.activerMembre() lors de la validation admin.
|
||||
*
|
||||
* <p>Si le membre n'a pas encore de compte Keycloak, le provisionne d'abord
|
||||
* puis assigne le rôle MEMBRE_ACTIF.
|
||||
*
|
||||
* @param membreId UUID du membre à activer dans Keycloak
|
||||
* @throws NotFoundException si le membre n'existe pas en base
|
||||
*/
|
||||
@Transactional
|
||||
public void activerMembreDansKeycloak(java.util.UUID membreId) {
|
||||
LOGGER.info("Activation Keycloak (rôle MEMBRE_ACTIF) pour Membre ID: " + membreId);
|
||||
|
||||
Membre membre = membreRepository.findByIdOptional(membreId)
|
||||
.orElseThrow(() -> new NotFoundException("Membre non trouvé avec l'ID: " + membreId));
|
||||
|
||||
// Provisionner le compte Keycloak s'il n'existe pas encore
|
||||
if (membre.getKeycloakId() == null) {
|
||||
LOGGER.info("Compte Keycloak absent — provisionnement automatique pour " + membre.getNomComplet());
|
||||
provisionKeycloakUser(membreId);
|
||||
// Recharger après persist dans provisionKeycloakUser
|
||||
membre = membreRepository.findByIdOptional(membreId)
|
||||
.orElseThrow(() -> new NotFoundException("Membre non trouvé après provisionnement: " + membreId));
|
||||
}
|
||||
|
||||
String keycloakUserId = membre.getKeycloakId().toString();
|
||||
|
||||
try {
|
||||
// Récupérer l'utilisateur Keycloak
|
||||
UserDTO user = userServiceClient.getUserById(keycloakUserId, DEFAULT_REALM);
|
||||
|
||||
// S'assurer que le compte est activé
|
||||
if (Boolean.FALSE.equals(user.getEnabled())) {
|
||||
user.setEnabled(true);
|
||||
userServiceClient.updateUser(keycloakUserId, user, DEFAULT_REALM);
|
||||
}
|
||||
|
||||
// Ajouter le rôle MEMBRE_ACTIF s'il n'est pas déjà présent
|
||||
List<String> roles = user.getRealmRoles() != null
|
||||
? new java.util.ArrayList<>(user.getRealmRoles())
|
||||
: new java.util.ArrayList<>();
|
||||
if (!roles.contains("MEMBRE_ACTIF")) {
|
||||
roles.add("MEMBRE_ACTIF");
|
||||
user.setRealmRoles(roles);
|
||||
userServiceClient.updateUser(keycloakUserId, user, DEFAULT_REALM);
|
||||
}
|
||||
|
||||
LOGGER.info("✅ Rôle MEMBRE_ACTIF assigné dans Keycloak pour " + membre.getNomComplet());
|
||||
|
||||
} catch (Exception e) {
|
||||
LOGGER.severe("❌ Erreur lors de l'activation Keycloak pour " + membre.getNomComplet() + ": " + e.getMessage());
|
||||
throw new RuntimeException("Impossible d'activer le compte Keycloak: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronise les données du Membre vers le User Keycloak.
|
||||
* Si le membre n'a pas de compte Keycloak, le provisionne automatiquement.
|
||||
|
||||
@@ -84,18 +84,40 @@ public class MembreService {
|
||||
throw new IllegalArgumentException("Un membre avec ce numéro existe déjà");
|
||||
}
|
||||
|
||||
// Forcer le statut d'attente — le compte est activé uniquement après validation
|
||||
// admin
|
||||
// Forcer l'activation pour les tests E2E (normalement géré par validation
|
||||
// admin)
|
||||
membre.setStatutCompte("ACTIF");
|
||||
membre.setActif(true);
|
||||
// Statut initial : en attente de validation admin
|
||||
// L'activation (ACTIF + Keycloak MEMBRE_ACTIF) se fait via PUT /api/membres/{id}/activer
|
||||
membre.setStatutCompte("EN_ATTENTE_VALIDATION");
|
||||
membre.setActif(false);
|
||||
|
||||
membreRepository.persist(membre);
|
||||
LOG.infof("Membre créé en attente de validation: %s (ID: %s)", membre.getNomComplet(), membre.getId());
|
||||
return membre;
|
||||
}
|
||||
|
||||
/**
|
||||
* Active un membre : passe son statut à ACTIF et son flag actif à true.
|
||||
* Doit être suivi d'un appel à MembreKeycloakSyncService.activerMembreDansKeycloak()
|
||||
* pour que le rôle MEMBRE_ACTIF soit assigné dans Keycloak.
|
||||
*
|
||||
* @param membreId UUID du membre à activer
|
||||
* @return Le membre mis à jour
|
||||
* @throws jakarta.ws.rs.NotFoundException si le membre est introuvable
|
||||
*/
|
||||
@Transactional
|
||||
public Membre activerMembre(UUID membreId) {
|
||||
LOG.infof("Activation du membre ID: %s", membreId);
|
||||
|
||||
Membre membre = membreRepository.findByIdOptional(membreId)
|
||||
.orElseThrow(() -> new jakarta.ws.rs.NotFoundException("Membre non trouvé avec l'ID: " + membreId));
|
||||
|
||||
membre.setStatutCompte("ACTIF");
|
||||
membre.setActif(true);
|
||||
membreRepository.persist(membre);
|
||||
|
||||
LOG.infof("Membre activé avec succès: %s (ID: %s)", membre.getNomComplet(), membreId);
|
||||
return membre;
|
||||
}
|
||||
|
||||
/** Met à jour un membre existant */
|
||||
@Transactional
|
||||
public Membre mettreAJourMembre(UUID id, Membre membreModifie) {
|
||||
|
||||
Reference in New Issue
Block a user