Refactoring - Version stable

This commit is contained in:
dahoud
2026-03-28 14:21:30 +00:00
parent 00b981c510
commit a740c172ef
4402 changed files with 88517 additions and 1555 deletions

View File

@@ -33,21 +33,28 @@ public class GlobalExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable exception) {
// Logger l'exception dans les logs applicatifs
log.error("Unhandled exception", exception);
// Déterminer le code HTTP
int statusCode = determineStatusCode(exception);
// Récupérer l'endpoint (safe pour les tests unitaires)
String endpoint = "unknown";
try {
// Logger l'exception dans les logs applicatifs
log.error("Unhandled exception", exception);
if (uriInfo != null) {
endpoint = uriInfo.getPath();
}
} catch (Exception e) {
// Ignore - pas de contexte REST (ex: test unitaire)
}
// Déterminer le code HTTP
int statusCode = determineStatusCode(exception);
// Générer le message et le stacktrace
String message = exception.getMessage() != null ? exception.getMessage() : exception.getClass().getSimpleName();
String stacktrace = getStackTrace(exception);
// Récupérer l'endpoint
String endpoint = uriInfo != null ? uriInfo.getPath() : "unknown";
// Générer le message et le stacktrace
String message = exception.getMessage() != null ? exception.getMessage() : exception.getClass().getSimpleName();
String stacktrace = getStackTrace(exception);
// Persister dans system_logs
// Persister dans system_logs (ne pas laisser ça crasher le mapper)
try {
systemLoggingService.logError(
determineSource(exception),
message,
@@ -57,17 +64,12 @@ public class GlobalExceptionMapper implements ExceptionMapper<Throwable> {
"/" + endpoint,
statusCode
);
// Retourner une réponse HTTP appropriée
return buildErrorResponse(exception, statusCode);
} catch (Exception e) {
// Ne jamais laisser l'exception mapper lui-même crasher
log.error("Error in GlobalExceptionMapper", e);
return Response.serverError()
.entity(java.util.Map.of("error", "Internal server error"))
.build();
log.warn("Failed to log error to system_logs", e);
}
// Retourner une réponse HTTP appropriée
return buildErrorResponse(exception, statusCode);
}
private int determineStatusCode(Throwable exception) {

View File

@@ -0,0 +1,40 @@
package dev.lions.unionflow.server.exception;
import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.ExceptionMapper;
import jakarta.ws.rs.ext.Provider;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
/**
* Exception Mapper pour les erreurs de traitement JSON (parsing, format, etc.).
* Retourne un 400 Bad Request avec un message détaillé.
*
* @author UnionFlow Team
* @version 1.0
* @since 2026-03-19
*/
@Slf4j
@Provider
public class JsonProcessingExceptionMapper implements ExceptionMapper<JsonProcessingException> {
@Override
public Response toResponse(JsonProcessingException exception) {
log.warn("JSON processing error: {}", exception.getMessage());
Map<String, Object> errorBody = new HashMap<>();
errorBody.put("message", "Erreur de traitement JSON");
errorBody.put("details", exception.getOriginalMessage() != null
? exception.getOriginalMessage()
: exception.getMessage());
errorBody.put("status", 400);
errorBody.put("timestamp", java.time.LocalDateTime.now().toString());
return Response.status(Response.Status.BAD_REQUEST)
.entity(errorBody)
.build();
}
}