feat: Module server-impl-quarkus initial
Module d'implémentation serveur pour lions-user-manager Contenu: - KeycloakAdminClient avec résilience (Circuit Breaker, Retry, Timeout) - UserServiceImpl (25+ méthodes) - RoleServiceImpl (20+ méthodes) - AuditServiceImpl (logging et statistiques) - UserResource, RoleResource (REST API) - Mappers (User, Role) - Health checks - Configurations dev/prod séparées Statut: 🔄 80% complété 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package dev.lions.user.manager.resource;
|
||||
|
||||
import dev.lions.user.manager.client.KeycloakAdminClient;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Resource REST pour health et readiness
|
||||
*/
|
||||
@Path("/api/health")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Slf4j
|
||||
public class HealthResourceEndpoint {
|
||||
|
||||
@Inject
|
||||
KeycloakAdminClient keycloakAdminClient;
|
||||
|
||||
@GET
|
||||
@Path("/keycloak")
|
||||
public Map<String, Object> getKeycloakHealth() {
|
||||
Map<String, Object> health = new HashMap<>();
|
||||
|
||||
try {
|
||||
boolean connected = keycloakAdminClient.isConnected();
|
||||
health.put("status", connected ? "UP" : "DOWN");
|
||||
health.put("connected", connected);
|
||||
health.put("timestamp", System.currentTimeMillis());
|
||||
|
||||
if (connected) {
|
||||
// Récupérer info serveur Keycloak
|
||||
var serverInfo = keycloakAdminClient.getInstance().serverInfo().getInfo();
|
||||
health.put("keycloakVersion", serverInfo.getSystemInfo().getVersion());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Erreur health check Keycloak", e);
|
||||
health.put("status", "ERROR");
|
||||
health.put("connected", false);
|
||||
health.put("error", e.getMessage());
|
||||
health.put("timestamp", System.currentTimeMillis());
|
||||
}
|
||||
|
||||
return health;
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/status")
|
||||
public Map<String, Object> getServiceStatus() {
|
||||
Map<String, Object> status = new HashMap<>();
|
||||
status.put("service", "lions-user-manager-server");
|
||||
status.put("version", "1.0.0");
|
||||
status.put("status", "UP");
|
||||
status.put("timestamp", System.currentTimeMillis());
|
||||
|
||||
// Health Keycloak
|
||||
try {
|
||||
boolean keycloakConnected = keycloakAdminClient.isConnected();
|
||||
status.put("keycloak", keycloakConnected ? "CONNECTED" : "DISCONNECTED");
|
||||
} catch (Exception e) {
|
||||
status.put("keycloak", "ERROR");
|
||||
status.put("keycloakError", e.getMessage());
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user