diff --git a/pom.xml b/pom.xml
index 168c86d..4882d52 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,29 +18,25 @@
-
- junit
- junit
- 3.8.1
- test
-
+
com.fasterxml.jackson.core
jackson-databind
2.15.4
compile
-
+
javax.servlet
javax.servlet-api
4.0.1
provided
+
diff --git a/src/main/java/com/banesco/Commons.java b/src/main/java/com/banesco/Commons.java
index e80eec4..8925a86 100644
--- a/src/main/java/com/banesco/Commons.java
+++ b/src/main/java/com/banesco/Commons.java
@@ -1,19 +1,8 @@
package com.banesco;
-import com.banesco.domain.model.BackResponse;
-
-
public class Commons {
public static void main(String[] args) {
- BackResponse backResponse = BackResponse.builder()
- .backendCode("200")
- .httpCode("420")
- .statusCode("420")
- .description("asdasd")
- .build();
-
- System.out.println(backResponse);
-
+ System.out.println("Commons...");
}
}
diff --git a/src/main/java/com/banesco/application/exception/BanRuntimeException.java b/src/main/java/com/banesco/application/exception/BanRuntimeException.java
deleted file mode 100644
index 79a3f3b..0000000
--- a/src/main/java/com/banesco/application/exception/BanRuntimeException.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.banesco.application.exception;
-
-import com.banesco.domain.interfaces.BaseStatusCodesEnum;
-
-public class BanRuntimeException extends RuntimeException {
-
- protected BaseStatusCodesEnum statusCode;
- protected String fieldName;
- protected String backendCode;
- protected String statusDesc;
-
- public BanRuntimeException() {
- super("Internal Error");
- }
-
- public BanRuntimeException(BaseStatusCodesEnum statusCode, String fieldName) {
- super(statusCode.getStatusDesc());
- this.statusCode = statusCode;
- this.fieldName = fieldName;
- }
-
- public BanRuntimeException(String backendCode, String statusDesc) {
- super(statusDesc);
- this.backendCode = backendCode;
- this.statusDesc = statusDesc;
- }
-
-}
diff --git a/src/main/java/com/banesco/application/exception/InvalidDataBanException.java b/src/main/java/com/banesco/application/exception/InvalidDataBanException.java
deleted file mode 100644
index da1fc84..0000000
--- a/src/main/java/com/banesco/application/exception/InvalidDataBanException.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.banesco.application.exception;
-
-import com.banesco.domain.interfaces.BaseStatusCodesEnum;
-
-public class InvalidDataBanException extends BanRuntimeException {
-
- public InvalidDataBanException(BaseStatusCodesEnum statusCode, String fieldName) {
- super(statusCode, fieldName);
- }
-}
diff --git a/src/main/java/com/banesco/common/application/exception/BanBackendException.java b/src/main/java/com/banesco/common/application/exception/BanBackendException.java
new file mode 100644
index 0000000..a30c0a2
--- /dev/null
+++ b/src/main/java/com/banesco/common/application/exception/BanBackendException.java
@@ -0,0 +1,33 @@
+package com.banesco.common.application.exception;
+
+public class BanBackendException extends RuntimeException {
+
+ protected String backendCode;
+ protected String backendDesc;
+ protected String target;
+
+ public BanBackendException(String backendCode, String backendDesc) {
+ super(backendDesc);
+ this.backendCode = backendCode;
+ this.backendDesc = backendDesc;
+ }
+
+ public BanBackendException(String backendCode, String backendDesc, String target) {
+ super(backendDesc.formatted(target) + ", Target:" + target);
+ this.backendCode = backendCode;
+ this.backendDesc = backendDesc;
+ this.target = target;
+ }
+
+ public String getBackendCode() {
+ return backendCode;
+ }
+
+ public String getBackendDesc() {
+ return backendDesc;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+}
diff --git a/src/main/java/com/banesco/common/application/exception/BanRuntimeException.java b/src/main/java/com/banesco/common/application/exception/BanRuntimeException.java
new file mode 100644
index 0000000..8548009
--- /dev/null
+++ b/src/main/java/com/banesco/common/application/exception/BanRuntimeException.java
@@ -0,0 +1,32 @@
+package com.banesco.common.application.exception;
+
+import com.banesco.common.domain.interfaces.BaseStatusCodesEnum;
+
+public class BanRuntimeException extends RuntimeException {
+
+ protected BaseStatusCodesEnum statusCode;
+ protected String target;
+
+ public BanRuntimeException() {
+ super("Internal Error");
+ }
+
+ public BanRuntimeException(BaseStatusCodesEnum statusCode, String target) {
+ super(statusCode.getStatusDesc().formatted(target) + ", Target:" + target);
+ this.statusCode = statusCode;
+ this.target = target;
+ }
+
+ public BanRuntimeException(BaseStatusCodesEnum statusCode) {
+ super(statusCode.getStatusDesc());
+ this.statusCode = statusCode;
+ }
+
+ public BaseStatusCodesEnum getStatusCode() {
+ return statusCode;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+}
diff --git a/src/main/java/com/banesco/domain/interfaces/BaseStatusCodesEnum.java b/src/main/java/com/banesco/common/domain/interfaces/BaseStatusCodesEnum.java
similarity index 68%
rename from src/main/java/com/banesco/domain/interfaces/BaseStatusCodesEnum.java
rename to src/main/java/com/banesco/common/domain/interfaces/BaseStatusCodesEnum.java
index 928f12d..da70b01 100644
--- a/src/main/java/com/banesco/domain/interfaces/BaseStatusCodesEnum.java
+++ b/src/main/java/com/banesco/common/domain/interfaces/BaseStatusCodesEnum.java
@@ -1,4 +1,4 @@
-package com.banesco.domain.interfaces;
+package com.banesco.common.domain.interfaces;
public interface BaseStatusCodesEnum {
String getStatusCode();
diff --git a/src/main/java/com/banesco/common/domain/model/ApiConfig.java b/src/main/java/com/banesco/common/domain/model/ApiConfig.java
new file mode 100644
index 0000000..b15eaba
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/ApiConfig.java
@@ -0,0 +1,54 @@
+package com.banesco.common.domain.model;
+
+import java.util.Map;
+
+/**
+ * Clase de configuración para APIs. Almacena la información necesaria para
+ * conectarse a un servicio API externo, incluyendo URL, configuración de
+ * timeout y parámetros adicionales. Diseñada para ser utilizada como objeto de
+ * configuración en clientes de API y servicios de integración.
+ */
+public class ApiConfig {
+
+ String url;
+ ApiTimeout timeout;
+ Map config;
+
+ public ApiConfig(){
+
+ }
+
+ public ApiConfig(String url,
+ ApiTimeout timeout,
+ Map config) {
+
+ this.url = url;
+ this.timeout = timeout;
+ this.config = config;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public ApiTimeout getTimeout() {
+ return timeout;
+ }
+
+ public void setTimeout(ApiTimeout timeout) {
+ this.timeout = timeout;
+ }
+
+ public Map getConfig() {
+ return config;
+ }
+
+ public void setConfig(Map config) {
+ this.config = config;
+ }
+
+}
diff --git a/src/main/java/com/banesco/common/domain/model/ApiTimeout.java b/src/main/java/com/banesco/common/domain/model/ApiTimeout.java
new file mode 100644
index 0000000..e7f6ab2
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/ApiTimeout.java
@@ -0,0 +1,37 @@
+package com.banesco.common.domain.model;
+
+/**
+ * Clase interna que representa la configuración de tiempos de espera
+ * (timeout) para conexiones a APIs. Define los tiempos máximos de espera
+ * para establecer la conexión y para recibir una respuesta, especificados
+ * en milisegundos.
+ */
+public class ApiTimeout{
+ private int connect;
+ private int response;
+
+ public ApiTimeout() {
+
+ }
+ public ApiTimeout(int connect, int response) {
+ this.connect = connect;
+ this.response = response;
+ }
+
+ public int getConnect() {
+ return connect;
+ }
+
+ public void setConnect(int connect) {
+ this.connect = connect;
+ }
+
+ public int getResponse() {
+ return response;
+ }
+
+ public void setResponse(int response) {
+ this.response = response;
+ }
+
+}
diff --git a/src/main/java/com/banesco/common/domain/model/BackResponse.java b/src/main/java/com/banesco/common/domain/model/BackResponse.java
new file mode 100644
index 0000000..1ab89e4
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/BackResponse.java
@@ -0,0 +1,63 @@
+package com.banesco.common.domain.model;
+
+/**
+ * Clase para obtener los codigos y mensajes de salida
+ */
+public class BackResponse {
+
+ private String backendCode;
+ private int httpCode;
+ private String statusCode;
+ private String description;
+
+ public BackResponse() {
+ }
+
+ public BackResponse(String backendCode,
+ int httpCode,
+ String statusCode,
+ String description) {
+ this.backendCode = backendCode;
+ this.httpCode = httpCode;
+ this.statusCode = statusCode;
+ this.description = backendCode;
+ }
+
+ public String getBackendCode() {
+ return backendCode;
+ }
+
+ public int getHttpCode() {
+ return httpCode;
+ }
+
+ public String getStatusCode() {
+ return statusCode;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setBackendCode(String backendCode) {
+ this.backendCode = backendCode;
+ }
+
+ public void setHttpCode(int httpCode) {
+ this.httpCode = httpCode;
+ }
+
+ public void setStatusCode(String statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return "{\"backendCode\":\"%s\",\"httpCode\":%d,\"statusCode\":\"%s\",\"description\":\"%s\"}"
+ .formatted(backendCode, httpCode, statusCode, description);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/banesco/common/domain/model/BaseResponse.java b/src/main/java/com/banesco/common/domain/model/BaseResponse.java
new file mode 100644
index 0000000..ca920bd
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/BaseResponse.java
@@ -0,0 +1,21 @@
+package com.banesco.common.domain.model;
+
+
+public class BaseResponse {
+ protected StatusResponse statusResponse;
+
+ public BaseResponse() {
+ }
+
+ public BaseResponse(StatusResponse statusResponse) {
+ this.statusResponse = statusResponse;
+ }
+
+ public StatusResponse getStatusResponse() {
+ return statusResponse;
+ }
+
+ public void setStatusResponse(StatusResponse statusResponse) {
+ this.statusResponse = statusResponse;
+ }
+}
diff --git a/src/main/java/com/banesco/common/domain/model/Device.java b/src/main/java/com/banesco/common/domain/model/Device.java
new file mode 100644
index 0000000..b19cb0c
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/Device.java
@@ -0,0 +1,50 @@
+package com.banesco.common.domain.model;
+
+
+/**
+ *
+ */
+public class Device {
+ private String type;
+ private String description;
+ private String ipAddress;
+
+ public Device() {
+
+ }
+
+ public Device(String type, String description, String ipAddress) {
+ this.type = type;
+ this.description = description;
+ this.ipAddress = ipAddress;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getIpAddress() {
+ return ipAddress;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setIpAddress(String ipAddress) {
+ this.ipAddress = ipAddress;
+ }
+
+ public String toString() {
+ return "{\"type\":\"%s\",\"ipAddress\":\"%s\",\"description\":\"%s\"}".formatted(type, ipAddress, description);
+ }
+
+}
diff --git a/src/main/java/com/banesco/common/domain/model/RedisParam.java b/src/main/java/com/banesco/common/domain/model/RedisParam.java
new file mode 100644
index 0000000..aef3541
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/RedisParam.java
@@ -0,0 +1,31 @@
+package com.banesco.common.domain.model;
+
+
+public class RedisParam {
+ private String prefix;
+ private long expiration;
+
+ public RedisParam() {
+ }
+
+ public RedisParam(String prefix, long expiration) {
+ this.prefix = prefix;
+ this.expiration = expiration;
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public long getExpiration() {
+ return expiration;
+ }
+
+ public void setExpiration(long expiration) {
+ this.expiration = expiration;
+ }
+}
diff --git a/src/main/java/com/banesco/common/domain/model/StatusResponse.java b/src/main/java/com/banesco/common/domain/model/StatusResponse.java
new file mode 100644
index 0000000..5ce52af
--- /dev/null
+++ b/src/main/java/com/banesco/common/domain/model/StatusResponse.java
@@ -0,0 +1,10 @@
+package com.banesco.common.domain.model;
+
+public record StatusResponse(String statusCode, String statusDesc) {
+
+ @Override
+ public String toString() {
+ return "{\"statusCode\":\"" + statusCode + "\",\"statusDesc\":\"" + statusDesc + "\"}";
+ }
+
+}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/AccountHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/AccountHelper.java
similarity index 80%
rename from src/main/java/com/banesco/infraestructure/helpers/AccountHelper.java
rename to src/main/java/com/banesco/common/infraestructure/helpers/AccountHelper.java
index 6d1e29e..b64a41f 100644
--- a/src/main/java/com/banesco/infraestructure/helpers/AccountHelper.java
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/AccountHelper.java
@@ -1,4 +1,4 @@
-package com.banesco.infraestructure.helpers;
+package com.banesco.common.infraestructure.helpers;
/**
@@ -6,10 +6,10 @@ package com.banesco.infraestructure.helpers;
* Proporciona métodos para manipular y formatear información de cuentas.
*/
public class AccountHelper {
-
+
/**
- * Enmascara un número de cuenta, mostrando solo los primeros 4
- * y últimos 4 Los dígitos intermedios son reemplazados por asteriscos para proteger la
+ * Enmascara un número de cuenta, mostrando solo los primeros 4
+ * y últimos 4 Los dígitos intermedios son reemplazados por asteriscos para proteger la
* información sensible del cliente.
*
* @param clearAccountId El número de cuenta completo sin enmascarar
@@ -17,6 +17,5 @@ public class AccountHelper {
*/
public static String getMaskedAccountId(String clearAccountId) {
return clearAccountId.substring(0, 4) + "************" + clearAccountId.substring(clearAccountId.length() - 4);
-
- }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java
new file mode 100644
index 0000000..1ee3e39
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/DateHelper.java
@@ -0,0 +1,163 @@
+package com.banesco.common.infraestructure.helpers;
+
+import java.time.DateTimeException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Clase utilitaria para operaciones relacionadas con fechas y horas.
+ * Proporciona métodos para validar, comparar y calcular períodos entre fechas.
+ */
+public class DateHelper {
+
+
+ private final Logger logger = Logger.getLogger(DateHelper.class.getName());
+ private final ZoneId currentZone = ZoneId.of("America/Caracas");
+ private final DateTimeFormatter DATE_YYYY_MM_DD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ private final DateTimeFormatter TIME_HH_MM_SS = DateTimeFormatter.ofPattern("HH:mm:ss");
+
+ private static class SingletonHelper {
+ private static final DateHelper INSTANCE = new DateHelper();
+ }
+
+
+ /**
+ * Constructo private to no allow other Instances
+ */
+ private DateHelper() {
+ // not public instance
+ }
+
+ /**
+ * Get Instance Singleton
+ *
+ * @return
+ */
+ public static DateHelper getInstance() {
+ return SingletonHelper.INSTANCE;
+ }
+
+ /**
+ * Permite obtener la Fecha Hora Actual
+ *
+ * @return
+ */
+ public LocalDateTime getCurrentDateTime() {
+ return LocalDateTime.now(currentZone);
+ }
+
+ /**
+ * Permite Obtener la Hora para una FechaHora, en caso de ser null se obtiene la hora actual
+ *
+ * @param now Feha Hora Local
+ * @return
+ */
+ public String getTime(LocalDateTime now) {
+ if (now == null) {
+ now = LocalDateTime.now(currentZone);
+ }
+ return now.format(TIME_HH_MM_SS);
+ }
+
+ /**
+ * Permite Obtener la Fecha para una FechaHora, en caso de ser null se obtiene la fecha actual
+ *
+ * @param now Feha Hora Local
+ * @return
+ */
+ public String getDate(LocalDateTime now) {
+ if (now == null) {
+ now = LocalDateTime.now(currentZone);
+ }
+ return now.format(DATE_YYYY_MM_DD);
+ }
+
+ /**
+ * Check is Current Hour is in Hour Range passed by parameters
+ * if Parameters are equal then return false
+ *
+ * @param rangeHourBegin Cadena de la hora de inicio del Rango
+ * @param rangeHourFinish Candena de la hora de fin del Rango
+ * @param hourStrToCheck Hora en cadena para evaluar si se encuentra entre el rango de parametros
+ * @return boolean
+ */
+ public boolean isHourInRange(String rangeHourBegin, String rangeHourFinish, String hourStrToCheck) {
+
+ return isHourInRange(Integer.parseInt(rangeHourBegin.replace(":", "")),
+ Integer.parseInt(rangeHourFinish.replace(":", "")),
+ hourStrToCheck
+ );
+
+ }
+
+ /**
+ * Check is Current Hour is in Hour Range passed by parameters
+ * if Parameters are equal then return false
+ *
+ * @param rangeHourBegin Numero entero de la hora de inicio del Rango
+ * @param rangeHourFinish Numero entero de la hora de fin del Rango
+ * @param hourStrToCheck Hora en cadena para evaluar si se encuentra entre el rango de parametros
+ * @return boolean
+ */
+ public boolean isHourInRange(int rangeHourBegin, int rangeHourFinish, String hourStrToCheck) {
+ boolean mustValidateService = false;
+
+ if (rangeHourBegin == rangeHourFinish) {
+ return mustValidateService;
+ }
+
+ int currentHour = Integer.parseInt(hourStrToCheck.replace(":", ""));
+
+
+ if (rangeHourBegin > rangeHourFinish) { // hour end is less than hour start, => then validate next day
+
+ if (currentHour <= rangeHourFinish || currentHour >= rangeHourBegin) {
+ mustValidateService = true;
+ }
+ } else if (currentHour >= rangeHourBegin && currentHour <= rangeHourFinish) { // Hour the same day
+ mustValidateService = true;
+ }
+ logger.log(Level.INFO, "La hora (%s => %d) %sesta entre %d y %d ".formatted(
+ hourStrToCheck,
+ currentHour,
+ (mustValidateService ? "" : "NO "),
+ rangeHourBegin,
+ rangeHourFinish));
+
+ return mustValidateService;
+ }
+
+ /**
+ * Calcula el número de días entre dos fechas.
+ *
+ * @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
+ * @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
+ * @return El número de días entre las fechas o -1 si ocurre un error al
+ * procesar las fechas
+ */
+ public long daysBetweenTwoDates(String startDate, String endDate) {
+ try {
+ return ChronoUnit.DAYS.between(LocalDate.parse(startDate), LocalDate.parse(endDate));
+ } catch (DateTimeException dte) {
+ return -1L;
+ }
+ }
+
+ /**
+ * Verifica si la fecha de inicio es anterior o igual a la fecha de fin.
+ *
+ * @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
+ * @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
+ * @return true si startDate es anterior o igual a endDate, false en caso
+ * contrario
+ */
+ public boolean isStartDateBeforeEndDate(String startDate, String endDate) {
+ return LocalDate.parse(startDate).isBefore(LocalDate.parse(endDate))
+ || LocalDate.parse(startDate).isEqual(LocalDate.parse(endDate));
+ }
+}
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/DeviceHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/DeviceHelper.java
new file mode 100644
index 0000000..d51e598
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/DeviceHelper.java
@@ -0,0 +1,96 @@
+package com.banesco.common.infraestructure.helpers;
+
+import com.banesco.common.domain.model.Device;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class DeviceHelper {
+
+ private boolean readDeviceFromRequest;
+ private final String DESKTOP = "Desktop";
+
+ /**
+ * Nombres de cabeceras HTTP que pueden contener la dirección IP del
+ * cliente. Se revisan en orden para encontrar la IP real considerando
+ * proxies y balanceadores.
+ */
+ private final String[] IP_HEADER_NAMES = {
+ "X-Forwarded-For",
+ "Proxy-Client-IP",
+ "WL-Proxy-Client-IP",
+ "HTTP_X_FORWARDED_FOR",
+ "HTTP_X_FORWARDED",
+ "HTTP_X_CLUSTER_CLIENT_IP",
+ "HTTP_CLIENT_IP",
+ "HTTP_FORWARDED_FOR",
+ "HTTP_FORWARDED",
+ "HTTP_VIA",
+ "REMOTE_ADDR"
+ };
+
+ public DeviceHelper() {
+ // Lee la propiedad del sistema. Si no existe, asume false por defecto.
+ String readDeviceProperty = System.getProperty("api.server-request.read-device");
+ this.readDeviceFromRequest = readDeviceProperty == null ? false : Boolean.parseBoolean(readDeviceProperty);
+ }
+
+ /**
+ * Obtiene la dirección IP remota del cliente a partir de la solicitud HTTP.
+ * Revisa varias cabeceras HTTP que podrían contener la IP real del cliente
+ * considerando proxies y balanceadores de carga.
+ *
+ * @param request La solicitud HTTP
+ * @return La dirección IP remota del cliente, o "0.0.0.0" si la solicitud
+ * es nula
+ */
+ public String getRemoteIP(HttpServletRequest request) {
+ if (request == null) {
+ return "0.0.0.0";
+ }
+
+ for (String header : IP_HEADER_NAMES) {
+ String ipList = request.getHeader(header);
+ if (!StringHelper.isEmpty(ipList) && !"unknown".equalsIgnoreCase(ipList)) {
+ return ipList.split(",")[0];
+ }
+ }
+
+ return request.getRemoteAddr();
+ }
+
+ /**
+ * Llena la información del dispositivo remoto del cliente en el objeto
+ * Device. Si se configura readDeviceFromRequest como true, siempre se
+ * obtendrá la información del dispositivo desde la solicitud HTTP,
+ * independientemente de si ya existe.
+ *
+ * @param servletRequest La solicitud HTTP
+ * @param device El objeto Device existente a actualizar o null para crear
+ * uno nuevo
+ * @return El objeto Device con la información del cliente actualizada
+ */
+ public Device fillRemoteDevice(HttpServletRequest servletRequest, Device device) {
+ if (device == null) {
+ device = new Device();
+ }
+ if (StringHelper.isEmpty(device.getIpAddress()) || readDeviceFromRequest) {
+ device.setIpAddress(getRemoteIP(servletRequest));
+ String userAgent = servletRequest.getHeader("user-agent");
+ if (userAgent == null) {
+
+ device.setType(DESKTOP);
+ device.setDescription(DESKTOP);
+ } else {
+ device.setDescription(userAgent);
+ if (userAgent.toLowerCase().contains("mobi")) {
+ device.setType("Mobile");
+ } else {
+ device.setType(DESKTOP);
+ }
+ }
+
+ }
+
+ return device;
+ }
+}
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/JsonHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/JsonHelper.java
new file mode 100644
index 0000000..7ed8431
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/JsonHelper.java
@@ -0,0 +1,93 @@
+package com.banesco.common.infraestructure.helpers;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class JsonHelper {
+
+ private static final Logger logger = Logger.getLogger(JsonHelper.class.getName());
+ public static final ObjectMapper MAPPER = new ObjectMapper();
+
+ static {
+ MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+ MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ }
+
+ /**
+ * Convert Object to jsonString
+ *
+ * @param object El objeto a convertir en JSON.
+ * @return La cadena JSON resultante o null si ocurre un error.
+ */
+ public static String getJsonFromObject(Object object) {
+ if (object == null) {
+ return "null";
+ }
+ try {
+ return MAPPER.writeValueAsString(object);
+ } catch (JsonProcessingException e) {
+ logger.log(Level.SEVERE, "Error parsing objeto a JSON: {0}", e.getMessage());
+ return null;
+ }
+ }
+
+ /**
+ * Convierte una cadena JSON en un objeto Java de la clase especificada.
+ *
+ * @param json La cadena JSON a convertir.
+ * @param className La clase del objeto Java resultante.
+ * @param El tipo del objeto resultante.
+ * @return El objeto Java resultante, o null si ocurre un error o la cadena
+ * JSON está vacía.
+ */
+ public static T getObjectFromJson(String json, Class className) {
+ if (json == null || json.isEmpty()) {
+ return null;
+ }
+ try {
+ return MAPPER.readValue(json, className);
+ } catch (JsonProcessingException | IllegalArgumentException e) {
+ logger.log(Level.WARNING, "Error parsing JSON a objeto: {0}", e.getMessage());
+ return null;
+ }
+ }
+
+ public static List getListFromJson(String json, Class className) {
+ if (json == null || json.isEmpty()) {
+ return new ArrayList<>();
+ }
+ try {
+ return MAPPER.readValue(json,
+ MAPPER.getTypeFactory().constructCollectionType(List.class, className)
+ );
+ } catch (JsonProcessingException | IllegalArgumentException e) {
+ logger.log(Level.WARNING, "Error parsing JSON a List Object: {0}", e.getMessage());
+ }
+
+ return new ArrayList<>();
+ }
+
+ public static List getListFromInputStream(InputStream inputStream, Class className) throws IOException {
+ if (inputStream == null) {
+ return new ArrayList<>();
+ }
+ try {
+ return MAPPER.readValue(inputStream,
+ MAPPER.getTypeFactory().constructCollectionType(List.class, className)
+ );
+ } catch (JsonProcessingException | IllegalArgumentException e) {
+ logger.log(Level.WARNING, "Error parsing JSON a List Object: {0}", e.getMessage());
+ }
+
+ return new ArrayList<>();
+ }
+}
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/LoggerHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/LoggerHelper.java
new file mode 100644
index 0000000..d655c54
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/LoggerHelper.java
@@ -0,0 +1,118 @@
+package com.banesco.common.infraestructure.helpers;
+
+/**
+ * Clase utilitaria para la generación de mensajes de registro (logging).
+ * Facilita la creación de cadenas formateadas para registrar información de
+ * solicitudes y respuestas, tanto públicas como privadas, así como mensajes de
+ * error. Utiliza un formato estandarizado para mejorar la legibilidad y
+ * facilitar el análisis de los registros del sistema.
+ */
+public class LoggerHelper {
+
+ /**
+ * Construye una cadena de información para una solicitud pública.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param request El objeto de solicitud.
+ * @param El tipo del objeto de solicitud.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoRequest(String requestId, T request) {
+ return String.format("[PUB RQ: %s] [%s]", requestId, JsonHelper.getJsonFromObject(request));
+ }
+
+ /**
+ * Construye una cadena de información para una solicitud pública.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param request El request en cadena de la solicitud.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoRequest(String requestId, String request) {
+ return String.format("[PUB RQ: %s] [%s]", requestId, request);
+ }
+
+ /**
+ * Construye una cadena de información para una respuesta pública.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param response El objeto de respuesta.
+ * @param El tipo del objeto de respuesta.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoResponse(String requestId, T response) {
+ return String.format("[PUB RS: %s] [%s]", requestId, JsonHelper.getJsonFromObject(response));
+ }
+
+ /**
+ * Construye una cadena de información para una respuesta pública.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param response El objeto en cadena de respuesta.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoResponse(String requestId, String response) {
+ return String.format("[PUB RS: %s] [%s]", requestId, response);
+ }
+
+ /**
+ * Construye una cadena de información para una solicitud privada.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param name El nombre de la solicitud privada.
+ * @param request El objeto de solicitud.
+ * @param El tipo del objeto de solicitud.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoPrivateRequest(String requestId, String name, T request) {
+ return String.format("[PRV RQ %s: %s] [%s]", name, requestId, JsonHelper.getJsonFromObject(request));
+ }
+
+ /**
+ * Construye una cadena de información para una solicitud privada.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param name El nombre de la solicitud privada.
+ * @param request El objeto en cadena de la solicitud.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoPrivateRequest(String requestId, String name, String request) {
+ return String.format("[PRV RQ %s: %s] [%s]", name, requestId, request);
+ }
+
+ /**
+ * Construye una cadena de información para una respuesta privada.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param name El nombre de la respuesta privada.
+ * @param response El objeto de respuesta.
+ * @param El tipo del objeto de respuesta.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoPrivateResponse(String requestId, String name, T response) {
+ return String.format("[PRV RS %s: %s] [%s]", name, requestId, JsonHelper.getJsonFromObject(response));
+ }
+
+ /**
+ * Construye una cadena de información para una respuesta privada.
+ *
+ * @param requestId El ID de la solicitud.
+ * @param name El nombre de la respuesta privada.
+ * @param response El objeto en cadena de la respuesta.
+ * @return Una cadena de información formateada.
+ */
+ public static String buildInfoPrivateResponse(String requestId, String name, String response) {
+ return String.format("[PRV RS %s: %s] [%s]", name, requestId, response);
+ }
+
+ /**
+ * Construye una cadena de error.
+ *
+ * @param requestId El ID de la solicitud asociada al error.
+ * @param out El mensaje de error.
+ * @return Una cadena de error formateada.
+ */
+ public static String buildError(String requestId, String out) {
+ return String.format("[ERROR %s] [%s]", requestId, out);
+ }
+}
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/RequestHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/RequestHelper.java
new file mode 100644
index 0000000..62f1b10
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/RequestHelper.java
@@ -0,0 +1,81 @@
+package com.banesco.common.infraestructure.helpers;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+/**
+ * Clase utilitaria para operaciones relacionadas con solicitudes HTTP y
+ * generación de identificadores. Proporciona métodos para generar IDs únicos,
+ * obtener información del cliente y gestionar información del dispositivo.
+ */
+public class RequestHelper {
+
+ private final String ALPHANUMERIC_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ private final int baseCharacterLen = ALPHANUMERIC_CHARACTERS.length();
+
+
+ /**
+ * Permite tener una cadena aleatoria de caracteres numericos
+ *
+ * @param len longitud de la cadena numerica a retornar
+ * @return
+ */
+ public String randomNumeric(int len) {
+ char[] chars = new char[len];
+ for (int i = 0; i < len; i++) {
+ chars[i] = (char) ThreadLocalRandom.current().nextInt(48, 58); // ascii index number
+ }
+
+ return new String(chars);
+ }
+
+ /**
+ * Permite tener una cadena aleatoria de caracteres alfa-numericos
+ *
+ * @param len longitud de la cadena alfa-numerica a retornar
+ * @return
+ */
+ public String randomAlphanumeric(int len) {
+ char[] chars = new char[len];
+ for (int i = 0; i < len; i++) {
+ chars[i] = ALPHANUMERIC_CHARACTERS.charAt(ThreadLocalRandom.current().nextInt(baseCharacterLen));
+ }
+
+ return new String(chars);
+ }
+
+
+ /**
+ * Retorna Identificador de la Instancia del Request, usando como prefijo un valor predefinido
+ * ejemplos: P2P, REM,
+ * Facilita identificar el origen de los Requests
+ * Deberia obtenerse una vez al inicia el Request
+ *
+ * @param apiSourceId
+ * @return
+ */
+ public String getInstanceId(String apiSourceId) {
+ return (apiSourceId == null ? "INST" : apiSourceId).concat(randomAlphanumeric(10));
+ }
+
+ /**
+ * Retorna un Identificador del Request, se sugiere usar el getInstanceId creada como prefijo.
+ * Usar uno para Cada Request que implique afectacion financiera
+ *
+ * @param instanceId
+ * @return
+ */
+ public String getRequestId(String instanceId) {
+ return instanceId.concat("REQ").concat(randomAlphanumeric(20));
+ }
+
+
+ /**
+ * Permite Obtener un valor Numerico de Identificador de Transaccion
+ *
+ * @param len
+ * @return
+ */
+ public String getTransactionId(int len) {
+ return randomNumeric(len);
+ }
+}
diff --git a/src/main/java/com/banesco/common/infraestructure/helpers/StringHelper.java b/src/main/java/com/banesco/common/infraestructure/helpers/StringHelper.java
new file mode 100644
index 0000000..9ab74bc
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/helpers/StringHelper.java
@@ -0,0 +1,106 @@
+package com.banesco.common.infraestructure.helpers;
+
+/**
+ * Clase utilitaria para operaciones con cadenas de texto (strings). Proporciona
+ * métodos para validar, manipular y formatear cadenas de texto. Incluye
+ * funcionalidades como verificación de tipos numéricos, validación de cadenas
+ * no vacías y funciones de formato como relleno de caracteres.
+ */
+public class StringHelper {
+
+ /**
+ * Verifica si una cadena de texto representa un número entero.
+ *
+ * @param value La cadena de texto a verificar.
+ * @return true si la cadena es un número entero válido, false en caso
+ * contrario.
+ * @throws NumberFormatException Si el string no tiene el formato adeacuado
+ */
+ public static boolean isNumeric(String value) {
+ if (value == null || value.isEmpty()) {
+ return false;
+ }
+ try {
+ Integer.parseInt(value);
+ return true;
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Verifica si una cadena de texto es nula o está vacía después de
+ * eliminar espacios en blanco.
+ *
+ * @param value La cadena de texto a verificar.
+ * @return true si la cadena está vacía, false en caso contrario.
+ */
+ public static boolean isEmpty(String value) {
+ return value == null || value.trim().isEmpty();
+ }
+
+
+ /**
+ * Rellena una cadena de texto con un carácter específico a la izquierda
+ * hasta alcanzar la longitud deseada.
+ *
+ * @param inputStr La cadena de texto a rellenar.
+ * @param strLenOut La longitud deseada de la cadena resultante.
+ * @param padChar El carácter de relleno.
+ * @return La cadena rellenada con el carácter especificado a la izquierda.
+ */
+ public static String leftPad(String inputStr, int strLenOut, char padChar) {
+ if (inputStr == null) {
+ inputStr = ""; // Handle null input
+ }
+ int padLength = strLenOut - inputStr.length();
+ if (padLength <= 0) {
+ return inputStr; // No padding needed
+ }
+
+ char[] paddedString = new char[padLength];
+ for (int i = 0; i < padLength; i++) {
+ paddedString[i] = padChar;
+ }
+
+ return new String(paddedString).concat(inputStr);
+ }
+
+ /**
+ * Permite convertir nombre de propiedad separada con (,-) to CamelCase
+ *
+ * @param inputStr Cadena de texto a convertir
+ * @param firstUpper Flag que indica si la primera letra es Mayuscula
+ * @return
+ */
+ public static String convertToCamelCase(String inputStr, boolean firstUpper) {
+
+ StringBuilder result = new StringBuilder();
+ boolean capitalizeNext = firstUpper;
+
+ for (char ch : inputStr.toCharArray()) {
+ if (ch == '.' || ch == '-') {
+ capitalizeNext = true; // Next character should be capitalized
+ } else {
+ if (capitalizeNext) {
+ result.append(Character.toUpperCase(ch)); // Capitalize current character
+ capitalizeNext = false; // Reset flag
+ } else {
+ result.append(Character.toLowerCase(ch)); // Append in lowercase
+ }
+ }
+ }
+
+ return result.toString();
+
+ }
+
+ /**
+ * @param inputStr Cadena de texto a convertir en UpperCamelCase
+ * @return
+ */
+ public static String convertToUpperCamelCase(String inputStr) {
+ return convertToCamelCase(inputStr, true);
+ }
+
+}
diff --git a/src/main/java/com/banesco/infraestructure/repository/MessageRepository.java b/src/main/java/com/banesco/common/infraestructure/repository/MessageRepository.java
similarity index 76%
rename from src/main/java/com/banesco/infraestructure/repository/MessageRepository.java
rename to src/main/java/com/banesco/common/infraestructure/repository/MessageRepository.java
index 443220d..d15eb7a 100644
--- a/src/main/java/com/banesco/infraestructure/repository/MessageRepository.java
+++ b/src/main/java/com/banesco/common/infraestructure/repository/MessageRepository.java
@@ -1,4 +1,8 @@
-package com.banesco.infraestructure.repository;
+package com.banesco.common.infraestructure.repository;
+
+import com.banesco.common.domain.model.BackResponse;
+import com.banesco.common.infraestructure.helpers.JsonHelper;
+import com.banesco.common.infraestructure.helpers.StringHelper;
import java.io.FileInputStream;
import java.io.IOException;
@@ -9,10 +13,6 @@ import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-import com.banesco.domain.model.BackResponse;
-import com.banesco.infraestructure.helpers.JsonHelper;
-import com.banesco.infraestructure.helpers.StringHelper;
-
public class MessageRepository {
private static final Logger logger = Logger.getLogger(MessageRepository.class.getName());
@@ -21,7 +21,6 @@ public class MessageRepository {
* Respuesta de error por defecto que se utiliza cuando no se encuentra un
* error específico.
*/
- public final BackResponse DEFAULT_ERROR = new BackResponse("CONFLICT");
/**
* Mapa que almacena múltiples mapas de códigos de error, donde la clave
@@ -33,14 +32,14 @@ public class MessageRepository {
* Carga los mensajes de error desde un InputStream y los almacena en un
* mapa.
*
- * @param inputStream El InputStream que contiene los datos JSON de los
- * mensajes de error.
+ * @param inputStream El InputStream que contiene los datos JSON de los
+ * mensajes de error.
* @param messageFileKey La clave del archivo de mensajes, utilizada para
- * almacenar el mapa en mapErrorsMultiple.
+ * almacenar el mapa en mapErrorsMultiple.
* @return Un mapa que contiene los códigos de error como claves y los
* objetos BackResponse como valores.
* @throws IOException Si ocurre un error de entrada/salida al leer el
- * InputStream.
+ * InputStream.
*/
private Map loadFile(InputStream inputStream, String messageFileKey) throws IOException {
Map mapStatusCodes = new HashMap<>();
@@ -56,9 +55,9 @@ public class MessageRepository {
* mapa.
*
* @param messageFileKey La clave del archivo de mensajes, utilizada para
- * almacenar el mapa en mapErrorsMultiple.
- * @param jsonString La cadena JSON que contiene los datos de los mensajes
- * de error.
+ * almacenar el mapa en mapErrorsMultiple.
+ * @param jsonString La cadena JSON que contiene los datos de los mensajes
+ * de error.
* @throws IOException Si ocurre un error al procesar la cadena JSON.
*/
public void loadMessagesFromString(String messageFileKey, String jsonString) throws IOException {
@@ -74,13 +73,13 @@ public class MessageRepository {
* específico.
*
* @param responseFile El nombre del archivo de respuesta para el cual se
- * desea obtener el mapa de errores.
+ * desea obtener el mapa de errores.
* @return Un mapa que contiene los códigos de error como claves y los
* objetos BackResponse como valores, o null si no se encuentra el mapa.
*/
- public Map getErrorMap(String responseFile) {
+ public Map getErrorMap(String responseFile, boolean insideProperties) {
Map errorMap = mapErrorsMultiple.get(responseFile);
- if (errorMap != null && !errorMap.isEmpty()) {
+ if (insideProperties || (errorMap != null && !errorMap.isEmpty())) {
return errorMap;
}
@@ -92,19 +91,20 @@ public class MessageRepository {
return loadFile(new FileInputStream("/config/".concat(fileName)), responseFile);
} catch (IOException e) {
// Si no se encuentra el archivo en /config/, intenta cargarlo desde el classpath.
- logger.log(Level.WARNING, String.format("Path /config/%s not found. Loading local from errors-mapping/%s", fileName, fileName));
+ logger.log(Level.WARNING, "Path /config/" + fileName + " not found. Loading local from errors-mapping/" + fileName);
ClassLoader classLoader = getClass().getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("errors-mapping/" + fileName);
if (inputStream == null) {
// Si no se encuentra el archivo en el classpath, registra un error y devuelve null.
- logger.log(Level.SEVERE, String.format("Resource errors-mapping/%s not found.", fileName));
+ logger.log(Level.SEVERE, "Resource errors-mapping/" + fileName + " not found.");
return null;
}
return loadFile(inputStream, responseFile);
}
} catch (IOException e) {
// Si ocurre un error al cargar el archivo desde cualquier ubicación, registra un error y devuelve null.
- logger.log(Level.SEVERE, String.format("Error loading Service Messages from /config/%s and errors-mapping/%s: %s", fileName, fileName, e.getMessage()));
+ logger.log(Level.SEVERE, "Error getting Service Messages to /config/".concat(fileName) + ": " + e.getMessage());
+
return null;
}
}
diff --git a/src/main/java/com/banesco/infraestructure/repository/RegisterSecurityRepository.java b/src/main/java/com/banesco/common/infraestructure/repository/RegisterSecurityRepository.java
similarity index 94%
rename from src/main/java/com/banesco/infraestructure/repository/RegisterSecurityRepository.java
rename to src/main/java/com/banesco/common/infraestructure/repository/RegisterSecurityRepository.java
index d421b36..34a189e 100644
--- a/src/main/java/com/banesco/infraestructure/repository/RegisterSecurityRepository.java
+++ b/src/main/java/com/banesco/common/infraestructure/repository/RegisterSecurityRepository.java
@@ -1,4 +1,8 @@
-package com.banesco.infraestructure.repository;
+package com.banesco.common.infraestructure.repository;
+
+import com.banesco.common.domain.model.ApiConfig;
+import com.banesco.common.infraestructure.helpers.JsonHelper;
+import com.banesco.common.infraestructure.helpers.LoggerHelper;
import java.io.BufferedReader;
import java.io.IOException;
@@ -13,10 +17,6 @@ import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
-import com.banesco.infraestructure.config.ApiConfig;
-import com.banesco.infraestructure.helpers.JsonHelper;
-import com.banesco.infraestructure.helpers.LoggerHelper;
-
public class RegisterSecurityRepository {
private static final Logger logger = Logger.getLogger(RegisterSecurityRepository.class.getName());
diff --git a/src/main/java/com/banesco/common/infraestructure/service/MessageService.java b/src/main/java/com/banesco/common/infraestructure/service/MessageService.java
new file mode 100644
index 0000000..b2aaa78
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/service/MessageService.java
@@ -0,0 +1,101 @@
+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 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)
+ );
+ }
+}
diff --git a/src/main/java/com/banesco/infraestructure/utils/DateValidator.java b/src/main/java/com/banesco/common/infraestructure/utils/DateValidator.java
similarity index 91%
rename from src/main/java/com/banesco/infraestructure/utils/DateValidator.java
rename to src/main/java/com/banesco/common/infraestructure/utils/DateValidator.java
index 0b7040d..782f5db 100644
--- a/src/main/java/com/banesco/infraestructure/utils/DateValidator.java
+++ b/src/main/java/com/banesco/common/infraestructure/utils/DateValidator.java
@@ -1,9 +1,8 @@
-package com.banesco.infraestructure.utils;
+package com.banesco.common.infraestructure.utils;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
-import java.util.regex.Pattern;
/**
* Clase para validación de fechas con configuración flexible. Permite validar
@@ -15,13 +14,13 @@ import java.util.regex.Pattern;
public class DateValidator {
private final DateTimeFormatter dateFormatter;
- private final Pattern datePattern;
+ private final PatternValidator datePattern;
private final int minYear;
private final int maxYear;
private DateValidator(Builder builder) {
this.dateFormatter = builder.dateFormatter;
- this.datePattern = Pattern.compile(builder.dateFormatRegex);
+ this.datePattern = new PatternValidator(builder.dateFormatRegex);
this.minYear = builder.minYear;
this.maxYear = builder.maxYear;
}
@@ -59,7 +58,7 @@ public class DateValidator {
}
public boolean isValidDateFormat(String date) {
- return date != null && datePattern.matcher(date).matches();
+ return datePattern.isValid(date);
}
public boolean isValidDate(String date) {
diff --git a/src/main/java/com/banesco/common/infraestructure/utils/PatternValidator.java b/src/main/java/com/banesco/common/infraestructure/utils/PatternValidator.java
new file mode 100644
index 0000000..205e980
--- /dev/null
+++ b/src/main/java/com/banesco/common/infraestructure/utils/PatternValidator.java
@@ -0,0 +1,32 @@
+package com.banesco.common.infraestructure.utils;
+
+import java.util.regex.Pattern;
+
+/**
+ * Clase para validar Expresion regulares
+ */
+public class PatternValidator {
+
+ private final Pattern pattern;
+
+ public PatternValidator(String patternStr) {
+ pattern = Pattern.compile(patternStr);
+ }
+
+ public static PatternValidator withRegex(String patternStr) {
+ return new PatternValidator(patternStr);
+ }
+
+ /**
+ * Validates is un valor tiene formato valido.
+ *
+ * @param value the value to check.
+ * @return true if the value has format valid, false otherwise.
+ */
+ public boolean isValid(String value) {
+ if (value == null) {
+ return false;
+ }
+ return pattern.matcher(value).matches();
+ }
+}
diff --git a/src/main/java/com/banesco/domain/model/BackResponse.java b/src/main/java/com/banesco/domain/model/BackResponse.java
deleted file mode 100644
index 955c848..0000000
--- a/src/main/java/com/banesco/domain/model/BackResponse.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.banesco.domain.model;
-
-public class BackResponse {
- private final String backendCode;
- private final String httpCode;
- private final String statusCode;
- private final String description;
-
- public BackResponse(String value) {
- this.backendCode = value;
- this.httpCode = value;
- this.statusCode = value;
- this.description = value;
- }
-
- private BackResponse(Builder builder) {
- this.backendCode = builder.backendCode;
- this.httpCode = builder.httpCode;
- this.statusCode = builder.statusCode;
- this.description = builder.description;
- }
-
- public String getBackendCode() {
- return backendCode;
- }
-
- public String getHttpCode() {
- return httpCode;
- }
-
- public String getStatusCode() {
- return statusCode;
- }
-
- public String getDescription() {
- return description;
- }
-
- public static class Builder {
- private String backendCode;
- private String httpCode;
- private String statusCode;
- private String description;
-
- public Builder() {}
-
- public Builder backendCode(String backendCode) {
- this.backendCode = backendCode;
- return this;
- }
-
- public Builder httpCode(String httpCode) {
- this.httpCode = httpCode;
- return this;
- }
-
- public Builder statusCode(String statusCode) {
- this.statusCode = statusCode;
- return this;
- }
-
- public Builder description(String description) {
- this.description = description;
- return this;
- }
-
- public BackResponse build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new BackResponse(this);
- }
-
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- @Override
- public String toString() {
- return "BackResponse [backendCode=" + backendCode + ", httpCode=" + httpCode + ", statusCode=" + statusCode
- + ", description=" + description + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/BaseResponse.java b/src/main/java/com/banesco/domain/model/BaseResponse.java
deleted file mode 100644
index 0b896d8..0000000
--- a/src/main/java/com/banesco/domain/model/BaseResponse.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.banesco.domain.model;
-
-public class BaseResponse {
-
- private StatusResponse statusResponse;
- private T dataResponse;
-
- public BaseResponse() {
- }
-
- public BaseResponse(StatusResponse statusResponse, T dataResponse) {
- this.statusResponse = statusResponse;
- this.dataResponse = dataResponse;
- }
-
- private BaseResponse(Builder builder) {
- this.statusResponse = builder.statusResponse;
- this.dataResponse = builder.dataResponse;
- }
-
- public StatusResponse getstatusResponse() {
- return statusResponse;
- }
-
- public T getdataResponse() {
- return dataResponse;
- }
-
- public static class Builder {
-
- private StatusResponse statusResponse;
- private T dataResponse;
-
- public Builder() {
- }
-
- public Builder statusResponse(StatusResponse statusResponse) {
- this.statusResponse = statusResponse;
- return this;
- }
-
- public Builder dataResponse(T dataResponse) {
- this.dataResponse = dataResponse;
- return this;
- }
-
- public BaseResponse build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new BaseResponse<>(this);
- }
- }
-
- public static Builder builder() {
- return new Builder<>();
- }
-
- @Override
- public String toString() {
- return "BaseResponse [statusResponse=" + statusResponse + ", dataResponse=" + dataResponse + "]";
- }
-}
diff --git a/src/main/java/com/banesco/domain/model/Device.java b/src/main/java/com/banesco/domain/model/Device.java
deleted file mode 100644
index 9035a01..0000000
--- a/src/main/java/com/banesco/domain/model/Device.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.banesco.domain.model;
-
-
-public class Device {
- private final String type;
- private final String description;
- private final String ipAddress;
-
- private Device(Builder builder) {
- this.type = builder.type;
- this.description = builder.description;
- this.ipAddress = builder.ipAddress;
- }
-
- public String getType() {
- return type;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getIpAddress() {
- return ipAddress;
- }
-
- public static class Builder {
- private String type;
- private String description;
- private String ipAddress;
-
- public Builder() {}
-
- public Builder type(String type) {
- this.type = type;
- return Builder.this;
- }
-
- public Builder description(String description) {
- this.description = description;
- return Builder.this;
- }
-
- public Builder ipAddress(String ipAddress) {
- this.ipAddress = ipAddress;
- return Builder.this;
- }
-
- public Device build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new Device(this);
- }
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("Device{");
- sb.append("type=").append(type);
- sb.append(", description=").append(description);
- sb.append(", ipAddress=").append(ipAddress);
- sb.append('}');
- return sb.toString();
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/FieldValidateResult.java b/src/main/java/com/banesco/domain/model/FieldValidateResult.java
deleted file mode 100644
index ca9a205..0000000
--- a/src/main/java/com/banesco/domain/model/FieldValidateResult.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.banesco.domain.model;
-
-public class FieldValidateResult {
-
- private String backendCode;
- private String field;
-
- public FieldValidateResult() {
- }
-
- public FieldValidateResult(String backendCode, String field) {
- this.backendCode = backendCode;
- this.field = field;
- }
-
- private FieldValidateResult(Builder builder) {
- this.backendCode = builder.backendCode;
- this.field = builder.field;
- }
-
- public String getBackendCode() {
- return backendCode;
- }
-
- public String getField() {
- return field;
- }
-
- public static class Builder {
-
- private String backendCode;
- private String field;
-
- public Builder() {
- }
-
- public Builder backendCode(String backendCode) {
- this.backendCode = backendCode;
- return this;
- }
-
- public Builder field(String field) {
- this.field = field;
- return this;
- }
-
- public FieldValidateResult build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new FieldValidateResult(this);
- }
-
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- @Override
- public String toString() {
- return "FieldValidateResult [backendCode=" + backendCode + ", field=" + field + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/RegisterSecurityRq.java b/src/main/java/com/banesco/domain/model/RegisterSecurityRq.java
deleted file mode 100644
index d870623..0000000
--- a/src/main/java/com/banesco/domain/model/RegisterSecurityRq.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package com.banesco.domain.model;
-
-import java.util.Date;
-
-public class RegisterSecurityRq {
- private final String codBan;
- private final String codMon;
- private final String codEve;
- private final String codEve2;
- private final String login;
- private final Date fecHor;
- private final String nacCli;
- private final Long cedRifCli;
- private final String objeto;
- private final Integer tipoRespuesta;
- private final String msgRespuesta;
- private final Integer tiempoRespuesta;
- private final String codFintech;
- private final String nombreFintech;
- private final String tipoDispositivo;
- private final String desDispositivo;
- private final String ipCli;
- private final String sp;
-
- private RegisterSecurityRq(Builder builder) {
- this.codBan = builder.codBan;
- this.codMon = builder.codMon;
- this.codEve = builder.codEve;
- this.codEve2 = builder.codEve2;
- this.login = builder.login;
- this.fecHor = builder.fecHor;
- this.nacCli = builder.nacCli;
- this.cedRifCli = builder.cedRifCli;
- this.objeto = builder.objeto;
- this.tipoRespuesta = builder.tipoRespuesta;
- this.msgRespuesta = builder.msgRespuesta;
- this.tiempoRespuesta = builder.tiempoRespuesta;
- this.codFintech = builder.codFintech;
- this.nombreFintech = builder.nombreFintech;
- this.tipoDispositivo = builder.tipoDispositivo;
- this.desDispositivo = builder.desDispositivo;
- this.ipCli = builder.ipCli;
- this.sp = builder.sp;
- }
-
- public String getCodBan() {
- return codBan;
- }
-
- public String getCodMon() {
- return codMon;
- }
-
- public String getCodEve() {
- return codEve;
- }
-
- public String getCodEve2() {
- return codEve2;
- }
-
- public String getLogin() {
- return login;
- }
-
- public Date getFecHor() {
- return fecHor;
- }
-
- public String getNacCli() {
- return nacCli;
- }
-
- public Long getCedRifCli() {
- return cedRifCli;
- }
-
- public String getObjeto() {
- return objeto;
- }
-
- public Integer getTipoRespuesta() {
- return tipoRespuesta;
- }
-
- public String getMsgRespuesta() {
- return msgRespuesta;
- }
-
- public Integer getTiempoRespuesta() {
- return tiempoRespuesta;
- }
-
- public String getCodFintech() {
- return codFintech;
- }
-
- public String getNombreFintech() {
- return nombreFintech;
- }
-
- public String getTipoDispositivo() {
- return tipoDispositivo;
- }
-
- public String getDesDispositivo() {
- return desDispositivo;
- }
-
- public String getIpCli() {
- return ipCli;
- }
-
- public String getSp() {
- return sp;
- }
-
- public static class Builder {
- private String codBan;
- private String codMon;
- private String codEve;
- private String codEve2;
- private String login;
- private Date fecHor;
- private String nacCli;
- private Long cedRifCli;
- private String objeto;
- private Integer tipoRespuesta;
- private String msgRespuesta;
- private Integer tiempoRespuesta;
- private String codFintech;
- private String nombreFintech;
- private String tipoDispositivo;
- private String desDispositivo;
- private String ipCli;
- private String sp;
-
- public Builder() {}
-
- public Builder codBan(String codBan) {
- this.codBan = codBan;
- return Builder.this;
- }
-
- public Builder codMon(String codMon) {
- this.codMon = codMon;
- return Builder.this;
- }
-
- public Builder codEve(String codEve) {
- this.codEve = codEve;
- return Builder.this;
- }
-
- public Builder codEve2(String codEve2) {
- this.codEve2 = codEve2;
- return Builder.this;
- }
-
- public Builder login(String login) {
- this.login = login;
- return Builder.this;
- }
-
- public Builder fecHor(Date fecHor) {
- this.fecHor = fecHor;
- return Builder.this;
- }
-
- public Builder nacCli(String nacCli) {
- this.nacCli = nacCli;
- return Builder.this;
- }
-
- public Builder cedRifCli(Long cedRifCli) {
- this.cedRifCli = cedRifCli;
- return Builder.this;
- }
-
- public Builder objeto(String objeto) {
- this.objeto = objeto;
- return Builder.this;
- }
-
- public Builder tipoRespuesta(Integer tipoRespuesta) {
- this.tipoRespuesta = tipoRespuesta;
- return Builder.this;
- }
-
- public Builder msgRespuesta(String msgRespuesta) {
- this.msgRespuesta = msgRespuesta;
- return Builder.this;
- }
-
- public Builder tiempoRespuesta(Integer tiempoRespuesta) {
- this.tiempoRespuesta = tiempoRespuesta;
- return Builder.this;
- }
-
- public Builder codFintech(String codFintech) {
- this.codFintech = codFintech;
- return Builder.this;
- }
-
- public Builder nombreFintech(String nombreFintech) {
- this.nombreFintech = nombreFintech;
- return Builder.this;
- }
-
- public Builder tipoDispositivo(String tipoDispositivo) {
- this.tipoDispositivo = tipoDispositivo;
- return Builder.this;
- }
-
- public Builder desDispositivo(String desDispositivo) {
- this.desDispositivo = desDispositivo;
- return Builder.this;
- }
-
- public Builder ipCli(String ipCli) {
- this.ipCli = ipCli;
- return Builder.this;
- }
-
- public Builder sp(String sp) {
- this.sp = sp;
- return Builder.this;
- }
-
- public RegisterSecurityRq build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new RegisterSecurityRq(this);
- }
-
- }
-
- @Override
- public String toString() {
- return "RegisterSecurityRq [codBan=" + codBan + ", codMon=" + codMon + ", codEve=" + codEve + ", codEve2="
- + codEve2 + ", login=" + login + ", fecHor=" + fecHor + ", nacCli=" + nacCli + ", cedRifCli="
- + cedRifCli + ", objeto=" + objeto + ", tipoRespuesta=" + tipoRespuesta + ", msgRespuesta="
- + msgRespuesta + ", tiempoRespuesta=" + tiempoRespuesta + ", codFintech=" + codFintech
- + ", nombreFintech=" + nombreFintech + ", tipoDispositivo=" + tipoDispositivo + ", desDispositivo="
- + desDispositivo + ", ipCli=" + ipCli + ", sp=" + sp + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/RequestBase.java b/src/main/java/com/banesco/domain/model/RequestBase.java
deleted file mode 100644
index f4438ff..0000000
--- a/src/main/java/com/banesco/domain/model/RequestBase.java
+++ /dev/null
@@ -1,223 +0,0 @@
-package com.banesco.domain.model;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class RequestBase {
-
- @JsonProperty("MsgRqHdr")
- public MsgRqHdr msgRqHdr;
-
- public static class NetworkTrnInfo {
-
- @JsonProperty("TransactionConsecutive")
- public String transactionConsecutive;
- @JsonProperty("RegisterNumber")
- public String registerNumber;
- @JsonProperty("OperationType")
- public String operationType;
- @JsonProperty("TransactionType")
- public String transactionType;
- @JsonProperty("TransactionCode")
- public String transactionCode;
- @JsonProperty("TransactionDate")
- public String transactionDate;
- @JsonProperty("TransactionTime")
- public String transactionTime;
- @JsonProperty("BankId")
- public String bankId;
- @JsonProperty("AgencyCode")
- public String agencyCode;
- @JsonProperty("ChannelId")
- public String channelId;
-
- public String getTransactionConsecutive() {
- return transactionConsecutive;
- }
-
- public void setTransactionConsecutive(String transactionConsecutive) {
- this.transactionConsecutive = transactionConsecutive;
- }
-
- public String getRegisterNumber() {
- return registerNumber;
- }
-
- public void setRegisterNumber(String registerNumber) {
- this.registerNumber = registerNumber;
- }
-
- public String getOperationType() {
- return operationType;
- }
-
- public void setOperationType(String operationType) {
- this.operationType = operationType;
- }
-
- public String getTransactionType() {
- return transactionType;
- }
-
- public void setTransactionType(String transactionType) {
- this.transactionType = transactionType;
- }
-
- public String getTransactionCode() {
- return transactionCode;
- }
-
- public void setTransactionCode(String transactionCode) {
- this.transactionCode = transactionCode;
- }
-
- public String getTransactionDate() {
- return transactionDate;
- }
-
- public void setTransactionDate(String transactionDate) {
- this.transactionDate = transactionDate;
- }
-
- public String getTransactionTime() {
- return transactionTime;
- }
-
- public void setTransactionTime(String transactionTime) {
- this.transactionTime = transactionTime;
- }
-
- public String getBankId() {
- return bankId;
- }
-
- public void setBankId(String bankId) {
- this.bankId = bankId;
- }
-
- public String getAgencyCode() {
- return agencyCode;
- }
-
- public void setAgencyCode(String agencyCode) {
- this.agencyCode = agencyCode;
- }
-
- public String getChannelId() {
- return channelId;
- }
-
- public void setChannelId(String channelId) {
- this.channelId = channelId;
- }
-
- }
-
- public static class ApplicantData {
-
- @JsonProperty("Application")
- public String application;
- }
-
- public static class VBProtocol {
-
- @JsonProperty("VBProtocolInd")
- public String vBProtocolInd;
- @JsonProperty("TransactionInd")
- public String transactionInd;
- }
-
- public static class MsgRqHdr {
-
- @JsonProperty("MessageDate")
- public String messageDate;
- @JsonProperty("MessageTime")
- public String messageTime;
- @JsonProperty("RequestId")
- public String requestId;
- @JsonProperty("SourceChannelCode")
- public String sourceChannelCode;
- @JsonProperty("SupervisorCode")
- public String supervisorCode;
- @JsonProperty("OperatorCode")
- public String operatorCode;
- @JsonProperty("NetworkTrnInfo")
- public NetworkTrnInfo networkTrnInfo;
- @JsonProperty("ApplicantData")
- public ApplicantData applicantData;
- @JsonProperty("VBProtocol")
- public VBProtocol vBProtocol;
-
- public String getMessageDate() {
- return messageDate;
- }
-
- public void setMessageDate(String messageDate) {
- this.messageDate = messageDate;
- }
-
- public String getMessageTime() {
- return messageTime;
- }
-
- public void setMessageTime(String messageTime) {
- this.messageTime = messageTime;
- }
-
- public String getRequestId() {
- return requestId;
- }
-
- public void setRequestId(String requestId) {
- this.requestId = requestId;
- }
-
- public String getSourceChannelCode() {
- return sourceChannelCode;
- }
-
- public void setSourceChannelCode(String sourceChannelCode) {
- this.sourceChannelCode = sourceChannelCode;
- }
-
- public String getSupervisorCode() {
- return supervisorCode;
- }
-
- public void setSupervisorCode(String supervisorCode) {
- this.supervisorCode = supervisorCode;
- }
-
- public String getOperatorCode() {
- return operatorCode;
- }
-
- public void setOperatorCode(String operatorCode) {
- this.operatorCode = operatorCode;
- }
-
- public NetworkTrnInfo getNetworkTrnInfo() {
- return networkTrnInfo;
- }
-
- public void setNetworkTrnInfo(NetworkTrnInfo networkTrnInfo) {
- this.networkTrnInfo = networkTrnInfo;
- }
-
- public ApplicantData getApplicantData() {
- return applicantData;
- }
-
- public void setApplicantData(ApplicantData applicantData) {
- this.applicantData = applicantData;
- }
-
- public VBProtocol getvBProtocol() {
- return vBProtocol;
- }
-
- public void setvBProtocol(VBProtocol vBProtocol) {
- this.vBProtocol = vBProtocol;
- }
-
- }
-}
diff --git a/src/main/java/com/banesco/domain/model/ResponseBase.java b/src/main/java/com/banesco/domain/model/ResponseBase.java
deleted file mode 100644
index 43e5ca8..0000000
--- a/src/main/java/com/banesco/domain/model/ResponseBase.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package com.banesco.domain.model;
-
-import java.util.ArrayList;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ResponseBase {
-
- @JsonProperty("MsgRsHdr")
- public ArrayList msgRsHdr;
-
- @JsonProperty("Status")
- public ArrayList status;
-
- public ResponseBase() {
- }
-
- public ResponseBase(ArrayList msgRsHdr, ArrayList status) {
- this.msgRsHdr = msgRsHdr;
- this.status = status;
- }
-
- public ResponseBase(Builder builder) {
- this.msgRsHdr = builder.msgRsHdr;
- this.status = builder.status;
- }
-
- public ArrayList getMsgRsHdr() {
- return msgRsHdr;
- }
-
- public void setMsgRsHdr(ArrayList msgRsHdr) {
- this.msgRsHdr = msgRsHdr;
- }
-
- public ArrayList getStatus() {
- return status;
- }
-
- public void setStatus(ArrayList status) {
- this.status = status;
- }
-
- public static class Builder {
-
- private ArrayList msgRsHdr;
- private ArrayList status;
-
- public Builder msgRsHdr(ArrayList msgRsHdr) {
- this.msgRsHdr = msgRsHdr;
- return this;
- }
-
- public Builder status(ArrayList status) {
- this.status = status;
- return this;
- }
-
- public ResponseBase build() {
- return new ResponseBase(msgRsHdr, status);
- }
- }
-
- public static class MsgRsHdr {
-
- @JsonProperty("FinalStatusRequest")
- public String finalStatusRequest;
- @JsonProperty("CountDataOut")
- public String countDataOut;
- @JsonProperty("TransactionCode")
- public String transactionCode;
- @JsonProperty("SupervisorCode")
- public String supervisorCode;
- @JsonProperty("OperationType")
- public String operationType;
- @JsonProperty("TransactionConsecutive")
- public String transactionConsecutive;
- @JsonProperty("DetailReg")
- public String detailReg;
- @JsonProperty("RegisterNumber")
- public ArrayList registerNumber;
- @JsonProperty("TransactionType")
- public String transactionType;
- @JsonProperty("RequestId")
- public String requestId;
- @JsonProperty("AppName")
- public String appName;
-
- public MsgRsHdr() {
- }
-
- public String getFinalStatusRequest() {
- return finalStatusRequest;
- }
-
- public void setFinalStatusRequest(String finalStatusRequest) {
- this.finalStatusRequest = finalStatusRequest;
- }
-
- public String getCountDataOut() {
- return countDataOut;
- }
-
- public void setCountDataOut(String countDataOut) {
- this.countDataOut = countDataOut;
- }
-
- public String getTransactionCode() {
- return transactionCode;
- }
-
- public void setTransactionCode(String transactionCode) {
- this.transactionCode = transactionCode;
- }
-
- public String getSupervisorCode() {
- return supervisorCode;
- }
-
- public void setSupervisorCode(String supervisorCode) {
- this.supervisorCode = supervisorCode;
- }
-
- public String getOperationType() {
- return operationType;
- }
-
- public void setOperationType(String operationType) {
- this.operationType = operationType;
- }
-
- public String getTransactionConsecutive() {
- return transactionConsecutive;
- }
-
- public void setTransactionConsecutive(String transactionConsecutive) {
- this.transactionConsecutive = transactionConsecutive;
- }
-
- public String getDetailReg() {
- return detailReg;
- }
-
- public void setDetailReg(String detailReg) {
- this.detailReg = detailReg;
- }
-
- public ArrayList getRegisterNumber() {
- return registerNumber;
- }
-
- public void setRegisterNumber(ArrayList registerNumber) {
- this.registerNumber = registerNumber;
- }
-
- public String getTransactionType() {
- return transactionType;
- }
-
- public void setTransactionType(String transactionType) {
- this.transactionType = transactionType;
- }
-
- public String getRequestId() {
- return requestId;
- }
-
- public void setRequestId(String requestId) {
- this.requestId = requestId;
- }
-
- public String getAppName() {
- return appName;
- }
-
- public void setAppName(String appName) {
- this.appName = appName;
- }
-
- public String toString() {
- return "MsgRsHdr [finalStatusRequest=" + finalStatusRequest + ", countDataOut=" + countDataOut
- + ", transactionCode=" + transactionCode + ", supervisorCode=" + supervisorCode + ", operationType="
- + operationType + ", transactionConsecutive=" + transactionConsecutive + ", detailReg=" + detailReg
- + ", registerNumber=" + registerNumber + ", transactionType=" + transactionType + ", requestId="
- + requestId + ", appName=" + appName + "]";
- }
-
- }
-
- public static class AdditionalStatus {
-
- @JsonProperty("StatusCode")
- public String statusCode;
- @JsonProperty("StatusDesc")
- public String statusDesc;
- @JsonProperty("Severity")
- public String severity;
-
- public String getStatusCode() {
- return statusCode;
- }
-
- public void setStatusCode(String statusCode) {
- this.statusCode = statusCode;
- }
-
- public String getStatusDesc() {
- return statusDesc;
- }
-
- public void setStatusDesc(String statusDesc) {
- this.statusDesc = statusDesc;
- }
-
- public String getSeverity() {
- return severity;
- }
-
- public void setSeverity(String severity) {
- this.severity = severity;
- }
-
- @Override
- public String toString() {
- return "AdditionalStatus [statusCode=" + statusCode + ", statusDesc=" + statusDesc + ", severity="
- + severity + "]";
- }
-
- }
-
- public static class Status {
-
- @JsonProperty("StatusCode")
- public String statusCode;
- @JsonProperty("StatusDesc")
- public String statusDesc;
- @JsonProperty("ApplicationName")
- public String applicationName;
- @JsonProperty("LineNumber")
- public int lineNumber;
- @JsonProperty("AdditionalStatus")
- public ArrayList additionalStatus;
-
- public String getStatusCode() {
-
- return statusCode;
- }
-
- public void setStatusCode(String statusCode) {
- this.statusCode = statusCode;
- }
-
- public String getStatusDesc() {
- return statusDesc;
- }
-
- public void setStatusDesc(String statusDesc) {
- this.statusDesc = statusDesc;
- }
-
- public String getApplicationName() {
- return applicationName;
- }
-
- public void setApplicationName(String applicationName) {
- this.applicationName = applicationName;
- }
-
- public int getLineNumber() {
- return lineNumber;
- }
-
- public void setLineNumber(int lineNumber) {
- this.lineNumber = lineNumber;
- }
-
- public ArrayList getAdditionalStatus() {
- return additionalStatus;
- }
-
- public void setAdditionalStatus(ArrayList additionalStatus) {
- this.additionalStatus = additionalStatus;
- }
-
- @Override
- public String toString() {
- return "Status [statusCode=" + statusCode + ", statusDesc=" + statusDesc + ", applicationName="
- + applicationName + ", lineNumber=" + lineNumber + ", additionalStatus=" + additionalStatus + "]";
- }
-
- }
-
- @Override
- public String toString() {
- return "ResponseBase [msgRsHdr=" + msgRsHdr + ", status=" + status + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/SecurityAuth.java b/src/main/java/com/banesco/domain/model/SecurityAuth.java
deleted file mode 100644
index 1d36626..0000000
--- a/src/main/java/com/banesco/domain/model/SecurityAuth.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.banesco.domain.model;
-
-
-public class SecurityAuth {
- private final String sessionId;
- private final String username;
-
- private SecurityAuth(Builder builder) {
- this.sessionId = builder.sessionId;
- this.username = builder.username;
- }
-
- public String getSessionId() {
- return sessionId;
- }
-
- public String getUsername() {
- return username;
- }
-
- public static class Builder {
- private String sessionId;
- private String username;
-
- public Builder() {}
-
- public Builder sessionId(String sessionId) {
- this.sessionId = sessionId;
- return Builder.this;
- }
-
- public Builder username(String username) {
- this.username = username;
- return Builder.this;
- }
-
- public SecurityAuth build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new SecurityAuth(this);
- }
-
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("SecurityAuth{");
- sb.append("sessionId=").append(sessionId);
- sb.append(", username=").append(username);
- sb.append('}');
- return sb.toString();
- }
-
-}
diff --git a/src/main/java/com/banesco/domain/model/StatusResponse.java b/src/main/java/com/banesco/domain/model/StatusResponse.java
deleted file mode 100644
index 2141095..0000000
--- a/src/main/java/com/banesco/domain/model/StatusResponse.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.banesco.domain.model;
-
-public class StatusResponse {
- private final String statusCode;
- private final String statusDesc;
-
- private StatusResponse(Builder builder) {
- this.statusCode = builder.statusCode;
- this.statusDesc = builder.statusDesc;
- }
-
- public String getStatusCode() {
- return statusCode;
- }
-
- public String getStatusDesc() {
- return statusDesc;
- }
-
- public static class Builder {
- private String statusCode;
- private String statusDesc;
-
- public Builder() {}
-
- public Builder statusCode(String statusCode) {
- this.statusCode = statusCode;
- return Builder.this;
- }
-
- public Builder statusDesc(String statusDesc) {
- this.statusDesc = statusDesc;
- return Builder.this;
- }
-
- public StatusResponse build() {
- // Validaciones de ser necesario
- // if (attr == null || attr.isEmpty()) {
- // throw new IllegalStateException("El atributo1 no puede estar vacío");
- // }
- return new StatusResponse(this);
- }
-
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- @Override
- public String toString() {
- return "StatusResponse [statusCode=" + statusCode + ", statusDesc=" + statusDesc + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/infraestructure/config/ApiConfig.java b/src/main/java/com/banesco/infraestructure/config/ApiConfig.java
deleted file mode 100644
index 84af947..0000000
--- a/src/main/java/com/banesco/infraestructure/config/ApiConfig.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.banesco.infraestructure.config;
-
-import java.util.Map;
-
-/**
- * Clase de configuración para APIs. Almacena la información necesaria para
- * conectarse a un servicio API externo, incluyendo URL, path, configuración de
- * timeout y parámetros adicionales. Diseñada para ser utilizada como objeto de
- * configuración en clientes de API y servicios de integración.
- */
-public class ApiConfig {
-
- private String url;
- private String path;
- private Timeout timeout;
- private Map config;
-
- public ApiConfig() {
- }
-
- public ApiConfig(String url, String path, Timeout timeout, Map config) {
- this.url = url;
- this.path = path;
- this.timeout = timeout;
- this.config = config;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public Timeout getTimeout() {
- return timeout;
- }
-
- public void setTimeout(Timeout timeout) {
- this.timeout = timeout;
- }
-
- public Map getConfig() {
- return config;
- }
-
- public void setConfig(Map config) {
- this.config = config;
- }
-
- /**
- * Clase interna que representa la configuración de tiempos de espera
- * (timeout) para conexiones a APIs. Define los tiempos máximos de espera
- * para establecer la conexión y para recibir una respuesta, especificados
- * en milisegundos.
- */
- public static class Timeout {
-
- private int connect = 15000;
- private int response = 15000;
-
- public Timeout() {
- }
-
- public Timeout(int connect, int response) {
- this.connect = connect;
- this.response = response;
- }
-
- public int getConnect() {
- return connect;
- }
-
- public void setConnect(int connect) {
- this.connect = connect;
- }
-
- public int getResponse() {
- return response;
- }
-
- public void setResponse(int response) {
- this.response = response;
- }
- }
-
- @Override
- public String toString() {
- return "ApiConfig [url=" + url + ", path=" + path + ", timeout=" + timeout + ", config=" + config + "]";
- }
-
-}
diff --git a/src/main/java/com/banesco/infraestructure/config/RestClient.java b/src/main/java/com/banesco/infraestructure/config/RestClient.java
deleted file mode 100644
index 5e373c0..0000000
--- a/src/main/java/com/banesco/infraestructure/config/RestClient.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.banesco.infraestructure.config;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.banesco.domain.model.RequestBase;
-import com.banesco.infraestructure.helpers.RequestHelper;
-import com.banesco.infraestructure.repository.SoapHeadersRepository;
-
-public class RestClient {
-
- private static final Logger logger = Logger.getLogger(RestClient.class.getName());
-
- private final String idGeneratorUrl;
- private final RequestHelper requestHelper;
- private String instanceId;
-
- public RestClient(String headerUrl, String idGeneratorUrl, RequestHelper requestHelper) {
- this.idGeneratorUrl = idGeneratorUrl;
- this.requestHelper = requestHelper;
- this.init();
- }
-
- private void init() {
- if (!idGeneratorUrl.contains("localhost")) {
- logger.log(Level.INFO, "Request to getInstanceId");
- this.instanceId = getInstanceId();
- logger.log(Level.INFO, "Response to getInstanceId: {0}", this.instanceId);
- }
- }
-
- public RequestBase.MsgRqHdr getHeader(String headerName) {
- return SoapHeadersRepository.getHeader(headerName);
- }
-
- public String getRequestId() {
- return requestHelper.getRequestId(instanceId);
- }
-
- public String getInstanceId() {
- return requestHelper.getInstanceId();
- }
-
-}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/DateHelper.java b/src/main/java/com/banesco/infraestructure/helpers/DateHelper.java
deleted file mode 100644
index ae35bf7..0000000
--- a/src/main/java/com/banesco/infraestructure/helpers/DateHelper.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.banesco.infraestructure.helpers;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.DateTimeException;
-import java.time.LocalDate;
-import java.time.temporal.ChronoUnit;
-import java.util.Date;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Clase utilitaria para operaciones relacionadas con fechas y horas.
- * Proporciona métodos para validar, comparar y calcular períodos entre fechas.
- */
-public class DateHelper {
-
- private static final Logger logger = Logger.getLogger(DateHelper.class.getName());
- private static final String TIME_FORMAT = "HH:mm";
-
- /**
- * Verifica si la hora actual está dentro del rango de horas proporcionado.
- * Si las horas de inicio y fin son iguales, devuelve false. Maneja
- * correctamente los rangos que cruzan la medianoche.
- *
- * @param inputHourOne Hora de inicio en formato HH:mm
- * @param inputHourTwo Hora de fin en formato HH:mm
- * @return true si la hora actual está dentro del rango, false en caso
- * contrario
- * @throws ParseException Si ocurre un error al analizar las horas
- * proporcionadas
- */
- public static boolean isTimeInRange(String inputHourOne, String inputHourTwo) throws ParseException {
- if (inputHourOne.equals(inputHourTwo)) {
- return false;
- }
-
- DateFormat dateFormat = new SimpleDateFormat(TIME_FORMAT);
- Date now = new Date();
- Date beginTime = dateFormat.parse(inputHourOne);
- Date endTime = dateFormat.parse(inputHourTwo);
- Date currentTime = dateFormat.parse(dateFormat.format(now));
-
- long beginMillis = beginTime.getTime();
- long endMillis = endTime.getTime();
- long currentMillis = currentTime.getTime();
-
- boolean isInRange;
-
- if (beginMillis > endMillis) {
- // Rango que cruza la medianoche
- isInRange = currentMillis >= beginMillis || currentMillis <= endMillis;
- } else {
- // Rango dentro del mismo día
- isInRange = currentMillis >= beginMillis && currentMillis <= endMillis;
- }
-
- String currentHourStr = dateFormat.format(now);
- logger.log(Level.INFO, "La hora {0}{1}entre {2} y {3}", new Object[]{currentHourStr, isInRange ? " está " : " NO está ", inputHourOne, inputHourTwo});
-
- return isInRange;
- }
-
- /**
- * Calcula el número de días entre dos fechas.
- *
- * @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
- * @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
- * @return El número de días entre las fechas o -1 si ocurre un error al
- * procesar las fechas
- */
- public long daysBetweenTwoDates(String startDate, String endDate) {
- try {
- return ChronoUnit.DAYS.between(LocalDate.parse(startDate), LocalDate.parse(endDate));
- } catch (DateTimeException dte) {
- return -1L;
- }
- }
-
- /**
- * Verifica si la fecha de inicio es anterior o igual a la fecha de fin.
- *
- * @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
- * @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
- * @return true si startDate es anterior o igual a endDate, false en caso
- * contrario
- */
- public boolean isStartDateBeforeEndDate(String startDate, String endDate) {
- return LocalDate.parse(startDate).isBefore(LocalDate.parse(endDate))
- || LocalDate.parse(startDate).isEqual(LocalDate.parse(endDate));
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/JsonHelper.java b/src/main/java/com/banesco/infraestructure/helpers/JsonHelper.java
deleted file mode 100644
index 121c388..0000000
--- a/src/main/java/com/banesco/infraestructure/helpers/JsonHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.banesco.infraestructure.helpers;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public class JsonHelper {
-
- private static final Logger logger = Logger.getLogger(JsonHelper.class.getName());
- public static final ObjectMapper MAPPER = new ObjectMapper();
-
- static {
- MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- }
-
- /**
- * Convierte un objeto Java en una cadena JSON.
- *
- * @param object El objeto a convertir en JSON.
- * @return La cadena JSON resultante o null si ocurre un error.
- * @throws JsonProcessingException si hay algún error al convertir el objeto
- * a JSON
- */
- public static String getJsonFromObject(Object object) {
- if (object == null) {
- return "null";
- }
- try {
- return MAPPER.writeValueAsString(object);
- } catch (JsonProcessingException e) {
- logger.log(Level.SEVERE, "Error al convertir objeto a JSON: {0}", e.getMessage());
- return null;
- }
- }
-
- /**
- * Convierte una cadena JSON en un objeto Java de la clase especificada.
- *
- * @param json La cadena JSON a convertir.
- * @param className La clase del objeto Java resultante.
- * @param El tipo del objeto resultante.
- * @return El objeto Java resultante, o null si ocurre un error o la cadena
- * JSON está vacía.
- * @throws JsonProcessingException Si ocurre un error al procesar JSON.
- * @throws IllegalArgumentException Si alguno de los argumentos no es
- * válido.
- */
- public static T getObjectFromJson(String json, Class className) {
- if (json == null || json.isEmpty()) {
- return null;
- }
- try {
- return MAPPER.readValue(json, className);
- } catch (JsonProcessingException | IllegalArgumentException e) {
- logger.log(Level.WARNING, "Error al convertir JSON a objeto: {0}", e.getMessage());
- return null;
- }
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/LoggerHelper.java b/src/main/java/com/banesco/infraestructure/helpers/LoggerHelper.java
deleted file mode 100644
index aa41c8c..0000000
--- a/src/main/java/com/banesco/infraestructure/helpers/LoggerHelper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.banesco.infraestructure.helpers;
-
-/**
- * Clase utilitaria para la generación de mensajes de registro (logging).
- * Facilita la creación de cadenas formateadas para registrar información de
- * solicitudes y respuestas, tanto públicas como privadas, así como mensajes de
- * error. Utiliza un formato estandarizado para mejorar la legibilidad y
- * facilitar el análisis de los registros del sistema.
- */
-public class LoggerHelper {
-
- /**
- * Construye una cadena de información para una solicitud pública.
- *
- * @param requestId El ID de la solicitud.
- * @param request El objeto de solicitud.
- * @param El tipo del objeto de solicitud.
- * @return Una cadena de información formateada.
- */
- public static String buildInfoRequest(String requestId, T request) {
- return String.format("[RQ PUB: %s] [%s]", requestId, JsonHelper.getJsonFromObject(request));
- }
-
- /**
- * Construye una cadena de información para una respuesta pública.
- *
- * @param requestId El ID de la solicitud.
- * @param response El objeto de respuesta.
- * @param El tipo del objeto de respuesta.
- * @return Una cadena de información formateada.
- */
- public static String buildInfoResponse(String requestId, T response) {
- return String.format("[RS PUB: %s] [%s]", requestId, JsonHelper.getJsonFromObject(response));
- }
-
- /**
- * Construye una cadena de información para una solicitud privada.
- *
- * @param requestId El ID de la solicitud.
- * @param name El nombre de la solicitud privada.
- * @param request El objeto de solicitud.
- * @param El tipo del objeto de solicitud.
- * @return Una cadena de información formateada.
- */
- public static String buildInfoPrivateRequest(String requestId, String name, T request) {
- return String.format("[RQ PRV %s: %s] [%s]", name, requestId, JsonHelper.getJsonFromObject(request));
- }
-
- /**
- * Construye una cadena de información para una respuesta privada.
- *
- * @param requestId El ID de la solicitud.
- * @param name El nombre de la respuesta privada.
- * @param response El objeto de respuesta.
- * @param El tipo del objeto de respuesta.
- * @return Una cadena de información formateada.
- */
- public static String buildInfoPrivateResponse(String requestId, String name, T response) {
- return String.format("[PRV RS %s: %s] [%s]", name, requestId, JsonHelper.getJsonFromObject(response));
- }
-
- /**
- * Construye una cadena de error.
- *
- * @param requestId El ID de la solicitud asociada al error.
- * @param out El mensaje de error.
- * @return Una cadena de error formateada.
- */
- public static String buildError(String requestId, String out) {
- return String.format("[ERROR %s] [%s]", requestId, out);
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/RequestHelper.java b/src/main/java/com/banesco/infraestructure/helpers/RequestHelper.java
deleted file mode 100644
index 41c40d9..0000000
--- a/src/main/java/com/banesco/infraestructure/helpers/RequestHelper.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package com.banesco.infraestructure.helpers;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import com.banesco.domain.model.Device;
-
-/**
- * Clase utilitaria para operaciones relacionadas con solicitudes HTTP y
- * generación de identificadores. Proporciona métodos para generar IDs únicos,
- * obtener información del cliente y gestionar información del dispositivo.
- */
-public class RequestHelper {
-
- private static boolean readDeviceFromRequest = false;
-
- /**
- * Nombres de cabeceras HTTP que pueden contener la dirección IP del
- * cliente. Se revisan en orden para encontrar la IP real considerando
- * proxies y balanceadores.
- */
- private static final String[] IP_HEADER_NAMES = {
- "X-Forwarded-For",
- "Proxy-Client-IP",
- "WL-Proxy-Client-IP",
- "HTTP_X_FORWARDED_FOR",
- "HTTP_X_FORWARDED",
- "HTTP_X_CLUSTER_CLIENT_IP",
- "HTTP_CLIENT_IP",
- "HTTP_FORWARDED_FOR",
- "HTTP_FORWARDED",
- "HTTP_VIA",
- "REMOTE_ADDR"
- };
-
- /**
- * Constructor de RequestHelper. Inicializa la configuración para la lectura
- * de información del dispositivo. Lee la propiedad de configuración
- * 'api.server-request.read-device' del sistema.
- */
- public RequestHelper() {
- // Lee la propiedad del sistema. Si no existe, asume false por defecto.
- String readDeviceProperty = System.getProperty("api.server-request.read-device");
- this.readDeviceFromRequest = Boolean.parseBoolean(readDeviceProperty);
- }
-
- /**
- * Genera un ID de instancia único con un prefijo específico. Útil para
- * identificar instancias del servidor o aplicación.
- *
- * @return Un ID de instancia con el prefijo "INST" seguido de 10 caracteres
- * alfanuméricos aleatorios
- */
- public static String getInstanceId() {
- return "INST" + RandomStringUtils.randomAlphanumeric(10);
- }
-
- /**
- * Genera un ID de solicitud único basado en el ID de instancia. Combina el
- * ID de instancia con caracteres aleatorios para crear un identificador
- * único.
- *
- * @param instanceId El ID de la instancia a incluir en el ID de solicitud
- * @return Un ID de solicitud en formato [instanceId]REQ[20 caracteres
- * aleatorios]
- */
- public static String getRequestId(String instanceId) {
- return instanceId + "REQ" + RandomStringUtils.randomAlphanumeric(20);
- }
-
- /**
- * Genera un ID de solicitud único sin necesidad de proporcionar un ID de
- * instancia. Crea un nuevo ID de instancia y lo utiliza para generar el ID
- * de solicitud.
- *
- * @return Un ID de solicitud completo con instancia generada
- * automáticamente
- */
- public static String getRequestId() {
- return getInstanceId() + "REQ" + RandomStringUtils.randomAlphanumeric(20);
- }
-
- /**
- * Genera un identificador de sesión (SID) aleatorio.
- *
- * @return Un string de 20 caracteres alfanuméricos aleatorios
- */
- public static String getSid() {
- return RandomStringUtils.randomAlphanumeric(20);
- }
-
- /**
- * Genera un ID de transacción numérico de 11 dígitos.
- *
- * @return Un string de 11 caracteres numéricos aleatorios
- */
- public static String getTransactionId() {
- return RandomStringUtils.randomNumeric(11);
- }
-
- /**
- * Genera un ID de transacción numérico con el número de dígitos
- * especificado.
- *
- * @param numDigitos El número de dígitos que debe tener el ID generado
- * @return Un string de caracteres numéricos aleatorios con la longitud
- * especificada
- */
- public static String getTransactionId(Integer numDigitos) {
- return RandomStringUtils.randomNumeric(numDigitos);
- }
-
- /**
- * Genera una referencia Banesco alfanumérica con el número de dígitos
- * especificado.
- *
- * @param numDigitos El número de dígitos que debe tener la referencia
- * generada
- * @return Un string de caracteres alfanuméricos aleatorios con la longitud
- * especificada
- */
- public static String getRefBanesco(Integer numDigitos) {
- return RandomStringUtils.randomAlphanumeric(numDigitos);
- }
-
- /**
- * Obtiene la dirección IP remota del cliente a partir de la solicitud HTTP.
- * Revisa varias cabeceras HTTP que podrían contener la IP real del cliente
- * considerando proxies y balanceadores de carga.
- *
- * @param request La solicitud HTTP
- * @return La dirección IP remota del cliente, o "0.0.0.0" si la solicitud
- * es nula
- */
- public static String getRemoteIP(HttpServletRequest request) {
- if (request == null) {
- return "0.0.0.0";
- }
-
- for (String header : IP_HEADER_NAMES) {
- String ipList = request.getHeader(header);
- if (StringUtils.isNotBlank(ipList) && !"unknown".equalsIgnoreCase(ipList)) {
- return ipList.split(",")[0];
- }
- }
-
- return request.getRemoteAddr();
- }
-
- /**
- * Llena la información del dispositivo remoto del cliente en el objeto
- * Device. Si se configura readDeviceFromRequest como true, siempre se
- * obtendrá la información del dispositivo desde la solicitud HTTP,
- * independientemente de si ya existe.
- *
- * @param servletRequest La solicitud HTTP
- * @param device El objeto Device existente a actualizar o null para crear
- * uno nuevo
- * @return El objeto Device con la información del cliente actualizada
- */
- public static Device fillRemoteDevice(HttpServletRequest servletRequest, Device device) {
- Device.Builder deviceBuilder = (device == null) ? Device.builder() : Device.builder()
- .ipAddress(device.getIpAddress())
- .description(device.getDescription())
- .type(device.getType());
-
- if (device == null || StringUtils.isEmpty(device.getIpAddress()) || readDeviceFromRequest) {
- String remoteIP = getRemoteIP(servletRequest);
- String userAgent = servletRequest.getHeader("user-agent");
- String deviceType = StringUtils.containsIgnoreCase(userAgent, "Mobi") ? "Mobile" : "Desktop";
-
- deviceBuilder.ipAddress(remoteIP)
- .description(userAgent)
- .type(deviceType);
- }
-
- return deviceBuilder.build();
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/helpers/StringHelper.java b/src/main/java/com/banesco/infraestructure/helpers/StringHelper.java
deleted file mode 100644
index 8d47791..0000000
--- a/src/main/java/com/banesco/infraestructure/helpers/StringHelper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.banesco.infraestructure.helpers;
-
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * Clase utilitaria para operaciones con cadenas de texto (strings). Proporciona
- * métodos para validar, manipular y formatear cadenas de texto. Incluye
- * funcionalidades como verificación de tipos numéricos, validación de cadenas
- * no vacías y funciones de formato como relleno de caracteres.
- */
-public class StringHelper {
-
- /**
- * Verifica si una cadena de texto representa un número entero.
- *
- * @param value La cadena de texto a verificar.
- * @return true si la cadena es un número entero válido, false en caso
- * contrario.
- * @throws NumberFormatException Si el string no tiene el formato adeacuado
- */
- public static boolean isNumeric(String value) {
- if (value == null || value.isEmpty()) {
- return false;
- }
- try {
- Integer.parseInt(value);
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
-
- /**
- * Verifica si una cadena de texto no es nula y no está vacía después de
- * eliminar espacios en blanco.
- *
- * @param value La cadena de texto a verificar.
- * @return true si la cadena no está vacía, false en caso contrario.
- */
- public static boolean isNotEmpty(String value) {
- return value != null && !value.trim().isEmpty();
- }
-
- /**
- * Rellena una cadena de texto con un carácter específico a la izquierda
- * hasta alcanzar la longitud deseada.
- *
- * @param numberStr La cadena de texto a rellenar.
- * @param strLen La longitud deseada de la cadena resultante.
- * @param c El carácter de relleno.
- * @return La cadena rellenada con el carácter especificado a la izquierda.
- */
- public static String leftPad(String numberStr, int strLen, Character c) {
- return StringUtils.leftPad(numberStr, strLen, c);
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/repository/SoapHeadersRepository.java b/src/main/java/com/banesco/infraestructure/repository/SoapHeadersRepository.java
deleted file mode 100644
index a7e8deb..0000000
--- a/src/main/java/com/banesco/infraestructure/repository/SoapHeadersRepository.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.banesco.infraestructure.repository;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.banesco.domain.model.RequestBase;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public class SoapHeadersRepository {
-
- private static final Logger logger = Logger.getLogger(MessageRepository.class.getName());
-
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
- public static final DateTimeFormatter DATE_TIME_YYYY_MM_dd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- public static final DateTimeFormatter DATE_TIME_HH_mm_ss = DateTimeFormatter.ofPattern("HH:mm:ss");
-
- public static RequestBase.MsgRqHdr getHeader(String headerName) {
- RequestBase.MsgRqHdr msgRqHdr = null;
-
- try {
- InputStream in = Thread.currentThread().getContextClassLoader()
- .getResourceAsStream("headers/" + headerName + ".json");
- msgRqHdr = OBJECT_MAPPER.readValue(Objects.requireNonNull(in), RequestBase.MsgRqHdr.class);
- } catch (IOException e) {
- logger.log(Level.WARNING, String.format("ERROR: Path /headers/%s", headerName));
- // o lanzar una excepcion.
- return null;
- }
-
- if (msgRqHdr != null) {
- Timestamp dateHour = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("America/Caracas")));
-
- String date = new SimpleDateFormat("yyyy-MM-dd").format(dateHour);
- String hour = new SimpleDateFormat("HH:mm:ss").format(dateHour);
-
- msgRqHdr.setMessageTime(hour);
- msgRqHdr.getNetworkTrnInfo().setTransactionDate(date);
- msgRqHdr.getNetworkTrnInfo().setTransactionTime(hour);
-
- return msgRqHdr;
- } else {
- return msgRqHdr;
- }
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/service/MessageService.java b/src/main/java/com/banesco/infraestructure/service/MessageService.java
deleted file mode 100644
index cb5e613..0000000
--- a/src/main/java/com/banesco/infraestructure/service/MessageService.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.banesco.infraestructure.service;
-
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.banesco.domain.model.BackResponse;
-import com.banesco.domain.model.BaseResponse;
-import com.banesco.infraestructure.repository.MessageRepository;
-
-public class MessageService {
-
- private static final Logger logger = Logger.getLogger(MessageService.class.getName());
- private final Class currentClass;
- private final MessageRepository messageRepository;
-
- /**
- * Constructor de MessageService.
- *
- * @param currentClass La clase de la respuesta genérica (T) que se
- * utilizará para crear instancias.
- * @param messageRepository El repositorio de mensajes que se utilizará para
- * cargar y obtener mensajes de error.
- */
- public MessageService(Class currentClass, MessageRepository messageRepository) {
- this.currentClass = currentClass;
- this.messageRepository = messageRepository;
- }
-
- /**
- * Crea una instancia de la clase genérica T.
- *
- * @return Una nueva instancia de T.
- * @throws RuntimeException Si ocurre un error al crear la instancia.
- */
- public T createInstance() {
- try {
- return currentClass.getDeclaredConstructor().newInstance();
- } catch (Exception e) {
- logger.log(Level.SEVERE, "Error creating instance: " + e.getMessage(), e);
- throw new RuntimeException("Error creating instance", e);
- }
- }
-
- /**
- * 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) {
- try {
- messageRepository.loadMessagesFromString(responseFileName, jsonResponse);
- } catch (Exception ex) {
- logger.log(Level.SEVERE, String.format("Error loading messages from JSON: %s", 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.
- */
- private BackResponse geStatusResponse(String responseFileName, String backendCode) {
- logger.log(Level.INFO, String.format("Finding backendCode: \"%s\" in File: \"%s\"", backendCode, responseFileName));
- Map errors = messageRepository.getErrorMap(responseFileName);
-
- if (errors == null || errors.isEmpty()) {
- logger.log(Level.WARNING, String.format("Error map for %s is empty or null.", responseFileName));
- return messageRepository.DEFAULT_ERROR;
- }
-
- BackResponse backResponse = null;
- try {
- backResponse = errors.get(backendCode);
- if (backResponse == null) {
- backResponse = errors.get("default");
- }
- } catch (Exception e) {
- logger.log(Level.WARNING, String.format("Error code: %s not found in %s. Using default.", 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, String.format("Error code: %s and default not found in %s.", backendCode, responseFileName));
- return messageRepository.DEFAULT_ERROR;
- }
- return backResponse;
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/utils/PhoneNumberValidator.java b/src/main/java/com/banesco/infraestructure/utils/PhoneNumberValidator.java
deleted file mode 100644
index 9e2a691..0000000
--- a/src/main/java/com/banesco/infraestructure/utils/PhoneNumberValidator.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.banesco.infraestructure.utils;
-
-import java.util.regex.Pattern;
-
-/**
- * Clase para validar números telefónicos según patrones específicos. Utiliza
- * expresiones regulares para verificar que los números telefónicos cumplan con
- * el formato esperado, permitiendo diferentes configuraciones según los
- * requisitos regionales o de formato de la aplicación.
- */
-public class PhoneNumberValidator {
-
- private final Pattern pattern;
-
- public PhoneNumberValidator(String phonePattern) {
- pattern = Pattern.compile(phonePattern);
- }
-
- /**
- * Validates the phone number format.
- *
- * @param phoneNumber the phone number to validate.
- * @return true if the phone number is valid, false otherwise.
- */
- public boolean isValid(String phoneNumber) {
- if (phoneNumber == null) {
- return false;
- }
- return pattern.matcher(phoneNumber).matches();
- }
-}
diff --git a/src/main/java/com/banesco/infraestructure/web/BaseWebClientBuilder.java b/src/main/java/com/banesco/infraestructure/web/BaseWebClientBuilder.java
deleted file mode 100644
index 42f9b99..0000000
--- a/src/main/java/com/banesco/infraestructure/web/BaseWebClientBuilder.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.banesco.infraestructure.web;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.time.Duration;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * Clase constructora para crear instancias de WebClient utilizando
- * java.net.http.HttpClient
- *
- * @author [Tu Nombre]
- */
-public class BaseWebClientBuilder {
-
- private String baseUrl;
- private Duration connectTimeout;
- private Duration responseTimeout;
-
- /**
- * Constructor para inicializar los timeouts con valores predeterminados.
- */
- public BaseWebClientBuilder() {
- this.connectTimeout = Duration.ofSeconds(10);
- this.responseTimeout = Duration.ofSeconds(10);
- }
-
- /**
- * Método estático para iniciar la construcción de un BaseWebClientBuilder.
- * Permite encadenar llamadas a los métodos de configuración.
- *
- * @return Una nueva instancia de BaseWebClientBuilder.
- */
- public static BaseWebClientBuilder builder() {
- return new BaseWebClientBuilder();
- }
-
- /**
- * Configura la URL base para el WebClient.
- *
- * @param baseUrl La URL base a utilizar.
- * @return La instancia actual de BaseWebClientBuilder para encadenar
- * llamadas.
- */
- public BaseWebClientBuilder baseUrl(String baseUrl) {
- this.baseUrl = baseUrl;
- return this;
- }
-
- /**
- * Configura el timeout de conexión.
- *
- * @param timeout El timeout de conexión.
- * @return La instancia actual de BaseWebClientBuilder para encadenar
- * llamadas.
- */
- public BaseWebClientBuilder connectTimeout(Duration timeout) {
- this.connectTimeout = timeout;
- return this;
- }
-
- /**
- * Configura el timeout de respuesta.
- *
- * @param timeout El timeout de respuesta.
- * @return La instancia actual de BaseWebClientBuilder para encadenar
- * llamadas.
- */
- public BaseWebClientBuilder responseTimeout(Duration timeout) {
- this.responseTimeout = timeout;
- return this;
- }
-
- /**
- * Construye y devuelve una instancia de HttpClient con la configuración
- * especificada.
- *
- * @return Una instancia de HttpClient configurada.
- */
- public HttpClient build() {
- return HttpClient.newBuilder()
- .connectTimeout(connectTimeout)
- .build();
- }
-
- /**
- * Realiza una petición GET utilizando el HttpClient configurado.
- *
- * @param httpClient El HttpClient configurado.
- * @param path El path de la petición.
- * @return Un CompletableFuture que emite la respuesta como String.
- * @throws IOException
- * @throws InterruptedException
- */
- public CompletableFuture get(HttpClient httpClient, String path) {
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(baseUrl + path))
- .header("Content-Type", "application/json")
- .header("Accept", "application/json")
- .timeout(responseTimeout)
- .GET()
- .build();
-
- return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
- .thenApply(HttpResponse::body);
- }
-
-}
diff --git a/src/test/java/com/banesco/AppTest.java b/src/test/java/com/banesco/AppTest.java
index f0474b7..0cbda81 100644
--- a/src/test/java/com/banesco/AppTest.java
+++ b/src/test/java/com/banesco/AppTest.java
@@ -1,38 +1,19 @@
package com.banesco;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
-public class AppTest
- extends TestCase
-{
+public class AppTest {
/**
* Create the test case
*
* @param testName name of the test case
*/
- public AppTest( String testName )
- {
- super( testName );
+
+ public AppTest(String testName) {
+
}
- /**
- * @return the suite of tests being tested
- */
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
- }
- /**
- * Rigourous Test :-)
- */
- public void testApp()
- {
- assertTrue( true );
- }
}