diff --git a/pom.xml b/pom.xml
index ab3e1fd..c515dfb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -187,6 +187,7 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 21
org.mapstruct
@@ -196,7 +197,7 @@
org.projectlombok
lombok
- 1.18.34
+ 1.18.36
org.projectlombok
diff --git a/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java b/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java
index 6362d0a..ac19c09 100644
--- a/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java
+++ b/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java
@@ -215,8 +215,25 @@ public class UserServiceImpl implements UserService {
UsersResource usersResource = keycloakAdminClient.getUsers(realmName);
var response = usersResource.create(userRep);
+ if (response.getStatus() == 409) {
+ // Utilisateur déjà existant — le récupérer par email ou username
+ log.warn("Utilisateur {} déjà existant dans Keycloak (409), récupération...", user.getUsername());
+ if (user.getEmail() != null) {
+ List existing = usersResource.searchByEmail(user.getEmail(), true);
+ if (!existing.isEmpty()) {
+ log.info("Utilisateur récupéré par email: {}", user.getEmail());
+ return UserMapper.toDTO(existing.get(0), realmName);
+ }
+ }
+ List existing = usersResource.searchByUsername(user.getUsername(), true);
+ if (!existing.isEmpty()) {
+ log.info("Utilisateur récupéré par username: {}", user.getUsername());
+ return UserMapper.toDTO(existing.get(0), realmName);
+ }
+ throw new RuntimeException("Utilisateur en conflit mais introuvable: " + user.getUsername());
+ }
if (response.getStatus() != 201) {
- throw new RuntimeException("Échec de la création de l'utilisateur: " + response.getStatusInfo());
+ throw new RuntimeException("Échec de la création de l'utilisateur (HTTP " + response.getStatus() + " " + response.getStatusInfo().getReasonPhrase() + ")");
}
// Récupérer l'ID de l'utilisateur créé
@@ -465,7 +482,7 @@ public class UserServiceImpl implements UserService {
public boolean usernameExists(@NotBlank String username, @NotBlank String realmName) {
try {
List users = keycloakAdminClient.getUsers(realmName)
- .search(username, 0, 1, true);
+ .searchByUsername(username, true);
return !users.isEmpty();
} catch (Exception e) {
log.error("Erreur lors de la vérification de l'existence du username {}", username, e);