102 lines
3.8 KiB
Java
102 lines
3.8 KiB
Java
package com.banesco.common.infraestructure.service;
|
|
|
|
import com.banesco.common.domain.model.BackResponse;
|
|
import com.banesco.common.domain.model.StatusResponse;
|
|
import com.banesco.common.infraestructure.repository.MessageRepository;
|
|
|
|
import java.util.Map;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
public class MessageService {
|
|
|
|
private static final Logger logger = Logger.getLogger(MessageService.class.getName());
|
|
private final MessageRepository messageRepository;
|
|
|
|
private final String CONFLICT = "CONFLICT";
|
|
private final BackResponse DEFAULT_ERROR = new BackResponse(
|
|
CONFLICT,
|
|
409,
|
|
CONFLICT,
|
|
CONFLICT
|
|
);
|
|
|
|
private boolean messagesInsideProperties = false;
|
|
|
|
/**
|
|
* Constructor de MessageService.
|
|
*
|
|
* @param messageRepository El repositorio de mensajes que se utilizará para
|
|
* cargar y obtener mensajes de error.
|
|
*/
|
|
public MessageService(MessageRepository messageRepository) {
|
|
this.messageRepository = messageRepository;
|
|
}
|
|
|
|
|
|
/**
|
|
* Carga mensajes desde una cadena JSON en el repositorio de mensajes.
|
|
*
|
|
* @param responseFileName El nombre del archivo de respuesta asociado con
|
|
* los mensajes.
|
|
* @param jsonResponse La cadena JSON que contiene los mensajes.
|
|
*/
|
|
public void loadMessageFromJson(String responseFileName, String jsonResponse) {
|
|
messagesInsideProperties = true;
|
|
try {
|
|
messageRepository.loadMessagesFromString(responseFileName, jsonResponse);
|
|
} catch (Exception ex) {
|
|
logger.log(Level.SEVERE, "Error loading messages from JSON: %s".formatted(ex.getMessage()), ex);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Obtiene una respuesta de estado (BackResponse) basada en el código de
|
|
* backend y el nombre del archivo de respuesta.
|
|
*
|
|
* @param responseFileName El nombre del archivo de respuesta.
|
|
* @param backendCode El código de backend para buscar la respuesta.
|
|
* @return La respuesta de estado (BackResponse) correspondiente al código
|
|
* de backend, la respuesta por defecto si no se encuentra, o null si hay un
|
|
* error.
|
|
*/
|
|
public BackResponse geStatusResponse(String responseFileName, String backendCode) {
|
|
logger.log(Level.INFO, "Finding backendCode: \"%s\" in File: \"%s\"".formatted(backendCode, responseFileName));
|
|
Map<String, BackResponse> errors = messageRepository.getErrorMap(responseFileName, messagesInsideProperties);
|
|
|
|
if (errors == null || errors.isEmpty()) {
|
|
logger.log(Level.WARNING, "Error map for %s is empty or null.".formatted(responseFileName));
|
|
return DEFAULT_ERROR;
|
|
}
|
|
|
|
BackResponse backResponse = null;
|
|
try {
|
|
backResponse = errors.get(backendCode);
|
|
if (backResponse == null) {
|
|
backResponse = errors.get("default");
|
|
}
|
|
} catch (Exception e) {
|
|
logger.log(Level.WARNING, "Error code: %s not found in %s. Using default.".formatted(backendCode, responseFileName), e);
|
|
try {
|
|
backResponse = errors.get("default");
|
|
} catch (Exception e2) {
|
|
logger.log(Level.SEVERE, "Error getting default code.", e2);
|
|
}
|
|
}
|
|
|
|
if (backResponse == null) {
|
|
logger.log(Level.WARNING, "Error code: %s and default not found in %s.".formatted(backendCode, responseFileName));
|
|
return DEFAULT_ERROR;
|
|
}
|
|
return backResponse;
|
|
}
|
|
|
|
public StatusResponse backToStatusResponse(BackResponse backResponse, String target) {
|
|
return new StatusResponse(
|
|
backResponse.getStatusCode(),
|
|
target == null ? backResponse.getDescription() :
|
|
backResponse.getDescription().formatted(target)
|
|
);
|
|
}
|
|
}
|