update exceptions
This commit is contained in:
parent
1179fd2877
commit
623eb23701
Binary file not shown.
@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
@RegisterForReflection
|
@RegisterForReflection
|
||||||
public class MessageResponseHelper {
|
public class MessageHelper {
|
||||||
|
|
||||||
private final MessagesConfig messagesConfig;
|
private final MessagesConfig messagesConfig;
|
||||||
private final Map<String, ErrorMapping> errorMappings;
|
private final Map<String, ErrorMapping> errorMappings;
|
||||||
@ -31,7 +31,7 @@ public class MessageResponseHelper {
|
|||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public MessageResponseHelper(
|
public MessageHelper(
|
||||||
ObjectMapper objectMapper,
|
ObjectMapper objectMapper,
|
||||||
MessagesConfig messagesConfig
|
MessagesConfig messagesConfig
|
||||||
) {
|
) {
|
||||||
@ -85,18 +85,18 @@ public class MessageResponseHelper {
|
|||||||
|
|
||||||
private ErrorMapping getError(String errorCode) {
|
private ErrorMapping getError(String errorCode) {
|
||||||
return errorMappings.getOrDefault(
|
return errorMappings.getOrDefault(
|
||||||
errorCode, errorMappings.getOrDefault(ERROR_DEFAULT, createDefaultMapping())
|
errorCode, errorMappings.getOrDefault(ERROR_DEFAULT, createDefaultMapping())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Response buildErrorResponse(HttpStatusCodeException exception) {
|
private Response buildErrorResponse(HttpStatusCodeException exception) {
|
||||||
ErrorMapping mapping = errorMappings.getOrDefault(
|
ErrorMapping mapping = errorMappings.getOrDefault(
|
||||||
exception.getErrorCode(),
|
exception.getErrorCode(), errorMappings.getOrDefault(
|
||||||
errorMappings.getOrDefault(ERROR_DEFAULT, createDefaultMapping())
|
String.valueOf(exception.getStatusCode()),
|
||||||
);
|
createDefaultMapping()
|
||||||
StatusResponse status = createError(
|
)
|
||||||
mapping, exception.getFieldPath()
|
|
||||||
);
|
);
|
||||||
|
StatusResponse status = createError(mapping, exception.getFieldPath());
|
||||||
|
|
||||||
log.error(
|
log.error(
|
||||||
"[{}] Message {} -> {}",
|
"[{}] Message {} -> {}",
|
||||||
@ -151,7 +151,7 @@ public class MessageResponseHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String loadFromJsonFile() {
|
private String loadFromJsonFile() {
|
||||||
try (InputStream is = MessageResponseHelper.class.getClassLoader().getResourceAsStream(ERROR_FILE_PATH)) {
|
try (InputStream is = MessageHelper.class.getClassLoader().getResourceAsStream(ERROR_FILE_PATH)) {
|
||||||
if (is == null) {
|
if (is == null) {
|
||||||
log.warn("No se encontró el archivo de errores: {}", ERROR_FILE_PATH);
|
log.warn("No se encontró el archivo de errores: {}", ERROR_FILE_PATH);
|
||||||
return "";
|
return "";
|
||||||
@ -173,9 +173,9 @@ public class MessageResponseHelper {
|
|||||||
private ErrorMapping createDefaultMapping() {
|
private ErrorMapping createDefaultMapping() {
|
||||||
ErrorMapping mapping = new ErrorMapping();
|
ErrorMapping mapping = new ErrorMapping();
|
||||||
mapping.setBackendCode(ERROR_DEFAULT);
|
mapping.setBackendCode(ERROR_DEFAULT);
|
||||||
mapping.setHttpCode(500);
|
mapping.setHttpCode(409);
|
||||||
mapping.setStatusCode("500");
|
mapping.setStatusCode("409");
|
||||||
mapping.setDescription("Error interno del servidor");
|
mapping.setDescription("Conflicto");
|
||||||
return mapping;
|
return mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ public class MessageResponseHelper {
|
|||||||
ErrorMapping mapping = new ErrorMapping();
|
ErrorMapping mapping = new ErrorMapping();
|
||||||
mapping.setBackendCode(SUCCESS_DEFAULT);
|
mapping.setBackendCode(SUCCESS_DEFAULT);
|
||||||
mapping.setHttpCode(200);
|
mapping.setHttpCode(200);
|
||||||
mapping.setStatusCode("000");
|
mapping.setStatusCode("200");
|
||||||
mapping.setDescription("Operación exitosa");
|
mapping.setDescription("Operación exitosa");
|
||||||
return mapping;
|
return mapping;
|
||||||
}
|
}
|
||||||
@ -31,17 +31,7 @@ public class HttpClientService implements HttpClientUseCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> T execute(HttpRequest request) {
|
public <T> T execute(HttpRequest request) {
|
||||||
String finalUrl = request.getUrl();
|
String finalUrl = buildFinalUrl(request);
|
||||||
|
|
||||||
if (request.getPathParams() != null && !request.getPathParams().isEmpty()) {
|
|
||||||
log.debug("PathParams antes de reemplazar: {}", request.getPathParams());
|
|
||||||
log.debug("URL original: {}", finalUrl);
|
|
||||||
|
|
||||||
for (Map.Entry<String, String> entry : request.getPathParams().entrySet()) {
|
|
||||||
String placeholder = "{" + entry.getKey() + "}";
|
|
||||||
finalUrl = finalUrl.replace(placeholder, entry.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.info("URL final: {}", finalUrl);
|
log.info("URL final: {}", finalUrl);
|
||||||
|
|
||||||
@ -60,14 +50,12 @@ public class HttpClientService implements HttpClientUseCase {
|
|||||||
try (Client client = createClient(request.getConnectTimeout(), request.getReadTimeout())) {
|
try (Client client = createClient(request.getConnectTimeout(), request.getReadTimeout())) {
|
||||||
WebTarget target = client.target(finalUrl);
|
WebTarget target = client.target(finalUrl);
|
||||||
|
|
||||||
if (request.getQueryParams() != null && !request.getQueryParams().isEmpty()) {
|
|
||||||
request.getQueryParams().forEach(target::queryParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON);
|
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON);
|
||||||
|
|
||||||
if (request.getHeaders() != null && !request.getHeaders().isEmpty()) {
|
if (request.getHeaders() != null && !request.getHeaders().isEmpty()) {
|
||||||
request.getHeaders().forEach(builder::header);
|
for (Map.Entry<String, String> entry : request.getHeaders().entrySet()) {
|
||||||
|
builder.header(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Response response = buildRequest(builder, request);
|
Response response = buildRequest(builder, request);
|
||||||
@ -78,12 +66,55 @@ public class HttpClientService implements HttpClientUseCase {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Error de conexión {}: {}", request.getMethod(), e.getMessage());
|
log.error("Error de conexión {}: {}", request.getMethod(), e.getMessage());
|
||||||
throw HttpStatusCodeException.serviceUnavailable(
|
throw HttpStatusCodeException.serviceUnavailable(
|
||||||
"503",
|
"503",
|
||||||
"Error de conexión con el servicio externo: " + e.getMessage()
|
"Error de conexión con el servicio externo: " + e.getMessage()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildFinalUrl(HttpRequest request) {
|
||||||
|
String finalUrl = request.getUrl();
|
||||||
|
|
||||||
|
if (request.getPathParams() != null && !request.getPathParams().isEmpty()) {
|
||||||
|
log.debug("PathParams antes de reemplazar: {}", request.getPathParams());
|
||||||
|
log.debug("URL original: {}", finalUrl);
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> entry : request.getPathParams().entrySet()) {
|
||||||
|
String placeholder = "{" + entry.getKey() + "}";
|
||||||
|
finalUrl = finalUrl.replace(placeholder, entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
finalUrl = appendQueryParams(finalUrl, request.getQueryParams());
|
||||||
|
|
||||||
|
return finalUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String appendQueryParams(String url, Map<String, String> queryParams) {
|
||||||
|
if (queryParams == null || queryParams.isEmpty()) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder urlBuilder = new StringBuilder(url);
|
||||||
|
|
||||||
|
boolean firstParam = !url.contains("?");
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
|
||||||
|
if (firstParam) {
|
||||||
|
urlBuilder.append("?");
|
||||||
|
firstParam = false;
|
||||||
|
} else {
|
||||||
|
urlBuilder.append("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
urlBuilder.append(entry.getKey())
|
||||||
|
.append("=")
|
||||||
|
.append(entry.getValue() != null ? entry.getValue() : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
return urlBuilder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private Response buildRequest(
|
private Response buildRequest(
|
||||||
Invocation.Builder builder,
|
Invocation.Builder builder,
|
||||||
HttpRequest request
|
HttpRequest request
|
||||||
@ -178,8 +209,8 @@ public class HttpClientService implements HttpClientUseCase {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private <T> T deserializeApiResponse(
|
private <T> T deserializeApiResponse(
|
||||||
String responseBody,
|
String responseBody,
|
||||||
HttpRequest request
|
HttpRequest request
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
if (request.getGenericType() != null) {
|
if (request.getGenericType() != null) {
|
||||||
|
|||||||
@ -0,0 +1,16 @@
|
|||||||
|
package com.banesco.common.domain.model;
|
||||||
|
|
||||||
|
import com.banesco.module.legal_customer_product_directory.domain.dto.request.LegalCustomerProductDirectoryRequest;
|
||||||
|
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
@RegisterForReflection
|
||||||
|
public class AppIdConfig {
|
||||||
|
private String appId;
|
||||||
|
private LegalCustomerProductDirectoryRequest request;
|
||||||
|
}
|
||||||
@ -7,7 +7,7 @@ import lombok.ToString;
|
|||||||
@Getter
|
@Getter
|
||||||
@ToString
|
@ToString
|
||||||
@RegisterForReflection
|
@RegisterForReflection
|
||||||
public class DominionConfig {
|
public class DomainConfig {
|
||||||
private String url;
|
private String url;
|
||||||
private TimeoutConfig timeout;
|
private TimeoutConfig timeout;
|
||||||
}
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
package com.banesco.common.infrastructure.config;
|
||||||
|
|
||||||
|
import com.banesco.common.domain.model.AppIdConfig;
|
||||||
|
import com.banesco.module.legal_customer_product_directory.domain.dto.request.LegalCustomerProductDirectoryRequest;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||||
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.eclipse.microprofile.config.Config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@ApplicationScoped
|
||||||
|
@RegisterForReflection
|
||||||
|
public class ApiAllowedConfig {
|
||||||
|
|
||||||
|
private final Config config;
|
||||||
|
private final ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
private static final String API_ALLOWED_BASE = "api.allowed.";
|
||||||
|
private static final String API_ALLOWED_APP_ID_NAME = "app-id";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ApiAllowedConfig(
|
||||||
|
Config config,
|
||||||
|
ObjectMapper objectMapper
|
||||||
|
) {
|
||||||
|
this.config = config;
|
||||||
|
this.objectMapper = objectMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AppIdConfig> getAppIdAllowed() {
|
||||||
|
try {
|
||||||
|
String fullConfigName = API_ALLOWED_BASE + API_ALLOWED_APP_ID_NAME;
|
||||||
|
String json = config.getValue(fullConfigName, String.class);
|
||||||
|
log.info("Configurando {}: {}", fullConfigName, json);
|
||||||
|
|
||||||
|
if (json == null || json.trim().isEmpty()) {
|
||||||
|
throw new IllegalStateException("Configuración no encontrada para: " + fullConfigName);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, Object>> configList = objectMapper.readValue(json, new TypeReference<>() {});
|
||||||
|
|
||||||
|
return configList.stream()
|
||||||
|
.map(this::mapToAppIdConfig)
|
||||||
|
.toList();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private AppIdConfig mapToAppIdConfig(Map<String, Object> configMap) {
|
||||||
|
AppIdConfig appIdConfig = new AppIdConfig();
|
||||||
|
String appId = (String) configMap.get("appId");
|
||||||
|
|
||||||
|
appIdConfig.setAppId(appId);
|
||||||
|
|
||||||
|
if (configMap.containsKey("request")) {
|
||||||
|
Object requestObj = configMap.get("request");
|
||||||
|
LegalCustomerProductDirectoryRequest request = objectMapper.convertValue(
|
||||||
|
requestObj, LegalCustomerProductDirectoryRequest.class
|
||||||
|
);
|
||||||
|
|
||||||
|
appIdConfig.setRequest(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
return appIdConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,7 +13,7 @@ public class MessagesConfig {
|
|||||||
private final String errorMessagesJson;
|
private final String errorMessagesJson;
|
||||||
private final String messagesKey;
|
private final String messagesKey;
|
||||||
|
|
||||||
private static final String KEY = "busLogalCustomerProductDirectory";
|
private static final String KEY = "bus-legal-customer-product-directory";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public MessagesConfig(Config config) {
|
public MessagesConfig(Config config) {
|
||||||
|
|||||||
@ -1,12 +0,0 @@
|
|||||||
package com.banesco.common.infrastructure.config;
|
|
||||||
|
|
||||||
import io.smallrye.config.ConfigMapping;
|
|
||||||
|
|
||||||
@ConfigMapping(prefix = "api.allowed.request-validation")
|
|
||||||
public interface RequestValidationConfig {
|
|
||||||
String customerIbsNumber();
|
|
||||||
String accountStatus();
|
|
||||||
String productCvCode();
|
|
||||||
String limitType();
|
|
||||||
String cacheaIndicator();
|
|
||||||
}
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.banesco.common.infrastructure.config;
|
package com.banesco.common.infrastructure.config;
|
||||||
|
|
||||||
import com.banesco.common.domain.model.DominionConfig;
|
import com.banesco.common.domain.model.DomainConfig;
|
||||||
import com.banesco.module.security_trace.domain.model.SecurityTraceConfig;
|
import com.banesco.module.security_trace.domain.model.SecurityTraceConfig;
|
||||||
import com.banesco.module.service_status.domain.model.ServiceStatusConfig;
|
import com.banesco.module.service_status.domain.model.ServiceStatusConfig;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
@ -36,8 +36,8 @@ public class RestClientConfig {
|
|||||||
this.objectMapper = objectMapper;
|
this.objectMapper = objectMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionConfig getDomLegalCustomerConfig() {
|
public DomainConfig getDomLegalCustomerConfig() {
|
||||||
return getConfig(API_DOMAIN_NAME, DominionConfig.class);
|
return getConfig(API_DOMAIN_NAME, DomainConfig.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SecurityTraceConfig getSecurityTraceConfig() {
|
public SecurityTraceConfig getSecurityTraceConfig() {
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
package com.banesco.module.legal_customer_product_directory.application.service;
|
package com.banesco.module.legal_customer_product_directory.application.service;
|
||||||
|
|
||||||
import com.banesco.common.application.helper.MessageResponseHelper;
|
import com.banesco.common.application.helper.MessageHelper;
|
||||||
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
||||||
import com.banesco.common.domain.model.ApiResponse;
|
import com.banesco.common.domain.model.ApiResponse;
|
||||||
|
import com.banesco.common.domain.model.AppIdConfig;
|
||||||
|
import com.banesco.common.infrastructure.config.ApiAllowedConfig;
|
||||||
import com.banesco.common.infrastructure.context.RequestContext;
|
import com.banesco.common.infrastructure.context.RequestContext;
|
||||||
import com.banesco.module.legal_customer_product_directory.application.usecase.DomainUseCase;
|
import com.banesco.module.legal_customer_product_directory.application.usecase.DomainUseCase;
|
||||||
import com.banesco.module.legal_customer_product_directory.application.usecase.LegalCustomerProductDirectoryUseCase;
|
import com.banesco.module.legal_customer_product_directory.application.usecase.LegalCustomerProductDirectoryUseCase;
|
||||||
@ -17,28 +19,34 @@ import jakarta.enterprise.context.ApplicationScoped;
|
|||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
public class LegalCustomerProductDirectoryService implements LegalCustomerProductDirectoryUseCase {
|
public class LegalCustomerProductDirectoryService implements LegalCustomerProductDirectoryUseCase {
|
||||||
|
|
||||||
private final MessageResponseHelper messageResponseHelper;
|
private final MessageHelper messageHelper;
|
||||||
private final ServiceStatusUseCase serviceStatusUseCase;
|
private final ServiceStatusUseCase serviceStatusUseCase;
|
||||||
private final SecurityTraceUseCase securityTraceUseCase;
|
private final SecurityTraceUseCase securityTraceUseCase;
|
||||||
private final DomainUseCase domainUseCase;
|
private final DomainUseCase domainUseCase;
|
||||||
|
|
||||||
|
private final List<AppIdConfig> appIdsAllowed;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public LegalCustomerProductDirectoryService(
|
public LegalCustomerProductDirectoryService(
|
||||||
MessageResponseHelper messageResponseHelper,
|
ApiAllowedConfig apiAllowedConfig,
|
||||||
|
MessageHelper messageHelper,
|
||||||
ServiceStatusUseCase serviceStatusUseCase,
|
ServiceStatusUseCase serviceStatusUseCase,
|
||||||
SecurityTraceUseCase securityTraceUseCase,
|
SecurityTraceUseCase securityTraceUseCase,
|
||||||
DomainUseCase domainUseCase
|
DomainUseCase domainUseCase
|
||||||
) {
|
) {
|
||||||
this.messageResponseHelper = messageResponseHelper;
|
this.messageHelper = messageHelper;
|
||||||
this.serviceStatusUseCase = serviceStatusUseCase;
|
this.serviceStatusUseCase = serviceStatusUseCase;
|
||||||
this.securityTraceUseCase = securityTraceUseCase;
|
this.securityTraceUseCase = securityTraceUseCase;
|
||||||
this.domainUseCase = domainUseCase;
|
this.domainUseCase = domainUseCase;
|
||||||
|
this.appIdsAllowed = apiAllowedConfig.getAppIdAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -47,19 +55,21 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
|
|||||||
) {
|
) {
|
||||||
log.info("Iniciando ejecución para el cliente: {}", request.getCustomerIbsNumber());
|
log.info("Iniciando ejecución para el cliente: {}", request.getCustomerIbsNumber());
|
||||||
|
|
||||||
if(!serviceStatus(request)) {
|
LegalCustomerProductDirectoryRequest requestFromAppId = getRequestFromAppId(request);
|
||||||
log.info("Estatus del servicio no disponible: {}", request.getCustomerIbsNumber());
|
|
||||||
|
if(!isServiceStatusActive(requestFromAppId)) {
|
||||||
|
log.info("Estatus del servicio no disponible: {}", requestFromAppId.getCustomerIbsNumber());
|
||||||
throw HttpStatusCodeException.serviceUnavailable("VRN04");
|
throw HttpStatusCodeException.serviceUnavailable("VRN04");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ApiResponse<LegalCustomerProductDirectoryResponse> response = domain(request);
|
ApiResponse<LegalCustomerProductDirectoryResponse> response = domain(requestFromAppId);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!Objects.isNull(response.getData()) &&
|
!Objects.isNull(response.getData()) &&
|
||||||
messageResponseHelper.isSuccessStatusCode(response.getStatusResponse())
|
messageHelper.isSuccessStatusCode(response.getStatusResponse())
|
||||||
) {
|
) {
|
||||||
return new ApiResponse<>(response.getData(), messageResponseHelper.createStatusResponse(
|
return new ApiResponse<>(response.getData(), messageHelper.createStatusResponse(
|
||||||
response.getStatusResponse().getStatusCode()
|
response.getStatusResponse().getStatusCode()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -76,6 +86,37 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LegalCustomerProductDirectoryRequest getRequestFromAppId(
|
||||||
|
LegalCustomerProductDirectoryRequest request
|
||||||
|
) {
|
||||||
|
if(appIdsAllowed.isEmpty()) {
|
||||||
|
log.info(
|
||||||
|
"Configuración de la Lista App ID no disponible: {} -> {}",
|
||||||
|
request.getCustomerIbsNumber(),
|
||||||
|
request.getAppId()
|
||||||
|
);
|
||||||
|
throw HttpStatusCodeException.unauthorized("401");
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<AppIdConfig> appIdAllowed = appIdsAllowed.stream()
|
||||||
|
.filter(config -> config.getAppId().equals(request.getAppId()))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
if(appIdAllowed.isEmpty()) {
|
||||||
|
log.info("App ID no habilitado: {} -> {}", request.getCustomerIbsNumber(), request.getAppId());
|
||||||
|
throw HttpStatusCodeException.unauthorized("401");
|
||||||
|
}
|
||||||
|
|
||||||
|
AppIdConfig appIdConfig = appIdAllowed.get();
|
||||||
|
|
||||||
|
if(!request.hasValidRequestParameters(appIdConfig)) {
|
||||||
|
log.info("App ID sin configuración: {} -> {}", request.getCustomerIbsNumber(), request.getAppId());
|
||||||
|
throw HttpStatusCodeException.unauthorized("401");
|
||||||
|
}
|
||||||
|
|
||||||
|
return request.fromAppIdConfig(appIdConfig);
|
||||||
|
}
|
||||||
|
|
||||||
private ApiResponse<LegalCustomerProductDirectoryResponse> domain(
|
private ApiResponse<LegalCustomerProductDirectoryResponse> domain(
|
||||||
LegalCustomerProductDirectoryRequest request
|
LegalCustomerProductDirectoryRequest request
|
||||||
) {
|
) {
|
||||||
@ -83,7 +124,7 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
|
|||||||
return domainUseCase.execute(request, LegalCustomerProductDirectoryResponse.class);
|
return domainUseCase.execute(request, LegalCustomerProductDirectoryResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean serviceStatus(
|
private boolean isServiceStatusActive(
|
||||||
LegalCustomerProductDirectoryRequest request
|
LegalCustomerProductDirectoryRequest request
|
||||||
) {
|
) {
|
||||||
log.info("Ejecutando llamada al api de la consulta del estatus del servicio");
|
log.info("Ejecutando llamada al api de la consulta del estatus del servicio");
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
package com.banesco.module.legal_customer_product_directory.domain.dto.request;
|
package com.banesco.module.legal_customer_product_directory.domain.dto.request;
|
||||||
|
|
||||||
|
import com.banesco.common.domain.model.AppIdConfig;
|
||||||
import io.quarkus.runtime.annotations.RegisterForReflection;
|
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static java.util.Map.entry;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
@Setter
|
||||||
@ToString
|
@ToString
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@ -34,9 +34,74 @@ public class LegalCustomerProductDirectoryRequest {
|
|||||||
private String casheaIndicator; // VCASHEA - SI/NO (filtro)
|
private String casheaIndicator; // VCASHEA - SI/NO (filtro)
|
||||||
|
|
||||||
public Map<String, String> toQueryString() {
|
public Map<String, String> toQueryString() {
|
||||||
return Map.ofEntries(
|
Map<String, String> queryParams = new LinkedHashMap<>();
|
||||||
entry("appId", Objects.toString(getAppId(), "")),
|
|
||||||
entry("customerReferenceFintechId", Objects.toString(getCustomerReferenceFintechId(), ""))
|
addIfNotEmpty(queryParams, "appId", getAppId());
|
||||||
);
|
addIfNotEmpty(queryParams, "customerReferenceFintechId", getCustomerReferenceFintechId());
|
||||||
|
addIfNotEmpty(queryParams, "serviceType", getServiceType());
|
||||||
|
addIfNotEmpty(queryParams, "limitType", getLimitType());
|
||||||
|
addIfNotEmpty(queryParams, "casheaIndicator", getCasheaIndicator());
|
||||||
|
addIfNotEmpty(queryParams, "bankNumber", getBankNumber());
|
||||||
|
addIfNotEmpty(queryParams, "currencyCode", getCurrencyCode());
|
||||||
|
addIfNotEmpty(queryParams, "accountStatus", getAccountStatus());
|
||||||
|
addIfNotEmpty(queryParams, "productCvCode", getProductCvCode());
|
||||||
|
addIfNotEmpty(queryParams, "productCode", getProductCode());
|
||||||
|
addIfNotEmpty(queryParams, "channelCode", getChannelCode());
|
||||||
|
addIfNotEmpty(queryParams, "affiliationStatus", getAffiliationStatus());
|
||||||
|
|
||||||
|
return queryParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LegalCustomerProductDirectoryRequest fromAppIdConfig(
|
||||||
|
AppIdConfig appIdConfig
|
||||||
|
) {
|
||||||
|
return LegalCustomerProductDirectoryRequest.builder()
|
||||||
|
.customerIbsNumber(this.getCustomerIbsNumber())
|
||||||
|
.appId(this.getAppId())
|
||||||
|
.customerReferenceFintechId(this.getCustomerReferenceFintechId())
|
||||||
|
.serviceType(appIdConfig.getRequest().getServiceType())
|
||||||
|
.limitType(appIdConfig.getRequest().getLimitType())
|
||||||
|
.casheaIndicator(appIdConfig.getRequest().getCasheaIndicator())
|
||||||
|
.bankNumber(appIdConfig.getRequest().getBankNumber())
|
||||||
|
.currencyCode(appIdConfig.getRequest().getCurrencyCode())
|
||||||
|
.accountStatus(appIdConfig.getRequest().getAccountStatus())
|
||||||
|
.productCvCode(appIdConfig.getRequest().getProductCvCode())
|
||||||
|
.productCode(appIdConfig.getRequest().getProductCode())
|
||||||
|
.channelCode(appIdConfig.getRequest().getChannelCode())
|
||||||
|
.affiliationStatus(appIdConfig.getRequest().getAffiliationStatus())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasValidRequestParameters(AppIdConfig appIdConfig) {
|
||||||
|
if (appIdConfig == null || appIdConfig.getRequest() == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LegalCustomerProductDirectoryRequest configRequest = appIdConfig.getRequest();
|
||||||
|
|
||||||
|
return hasValue(configRequest.getBankNumber()) ||
|
||||||
|
hasValue(configRequest.getCurrencyCode()) ||
|
||||||
|
hasValue(configRequest.getAccountStatus()) ||
|
||||||
|
hasValue(configRequest.getProductCvCode()) ||
|
||||||
|
hasValue(configRequest.getProductCode()) ||
|
||||||
|
hasValue(configRequest.getChannelCode()) ||
|
||||||
|
hasValue(configRequest.getServiceType()) ||
|
||||||
|
hasValue(configRequest.getAffiliationStatus()) ||
|
||||||
|
hasValue(configRequest.getLimitType()) ||
|
||||||
|
hasValue(configRequest.getCasheaIndicator());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addIfNotEmpty(
|
||||||
|
Map<String, String> map,
|
||||||
|
String key,
|
||||||
|
String value
|
||||||
|
) {
|
||||||
|
if (hasValue(value)) {
|
||||||
|
map.put(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasValue(String field) {
|
||||||
|
return field != null && !field.trim().isEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4,7 +4,7 @@ import com.banesco.common.application.usecase.HttpClientUseCase;
|
|||||||
import com.banesco.common.domain.exception.HttpApiResponseException;
|
import com.banesco.common.domain.exception.HttpApiResponseException;
|
||||||
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
||||||
import com.banesco.common.domain.model.ApiResponse;
|
import com.banesco.common.domain.model.ApiResponse;
|
||||||
import com.banesco.common.domain.model.DominionConfig;
|
import com.banesco.common.domain.model.DomainConfig;
|
||||||
import com.banesco.common.domain.model.HttpRequest;
|
import com.banesco.common.domain.model.HttpRequest;
|
||||||
import com.banesco.common.infrastructure.config.RestClientConfig;
|
import com.banesco.common.infrastructure.config.RestClientConfig;
|
||||||
import com.banesco.module.legal_customer_product_directory.application.usecase.DomainUseCase;
|
import com.banesco.module.legal_customer_product_directory.application.usecase.DomainUseCase;
|
||||||
@ -19,7 +19,7 @@ import java.util.Map;
|
|||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
public class DomLegalCustomerDirectoryClient implements DomainUseCase {
|
public class DomLegalCustomerDirectoryClient implements DomainUseCase {
|
||||||
private final HttpClientUseCase httpClientUseCase;
|
private final HttpClientUseCase httpClientUseCase;
|
||||||
private final DominionConfig dominionConfig;
|
private final DomainConfig domainConfig;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DomLegalCustomerDirectoryClient(
|
public DomLegalCustomerDirectoryClient(
|
||||||
@ -27,8 +27,8 @@ public class DomLegalCustomerDirectoryClient implements DomainUseCase {
|
|||||||
RestClientConfig restClientConfig
|
RestClientConfig restClientConfig
|
||||||
) {
|
) {
|
||||||
this.httpClientUseCase = httpClientUseCase;
|
this.httpClientUseCase = httpClientUseCase;
|
||||||
this.dominionConfig = restClientConfig.getDomLegalCustomerConfig();
|
this.domainConfig = restClientConfig.getDomLegalCustomerConfig();
|
||||||
log.info("Configuración cargada para bus-legal-customer-directory: {}", dominionConfig);
|
log.info("Configuración cargada para bus-legal-customer-directory: {}", domainConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -38,14 +38,14 @@ public class DomLegalCustomerDirectoryClient implements DomainUseCase {
|
|||||||
) {
|
) {
|
||||||
String customerIbsNumber = params.getCustomerIbsNumber();
|
String customerIbsNumber = params.getCustomerIbsNumber();
|
||||||
HttpRequest request = HttpRequest.builder()
|
HttpRequest request = HttpRequest.builder()
|
||||||
.url(dominionConfig.getUrl())
|
.url(domainConfig.getUrl())
|
||||||
.method(HttpRequest.HttpMethod.GET)
|
.method(HttpRequest.HttpMethod.GET)
|
||||||
.pathParams(Map.of("customerIbsNumber", customerIbsNumber))
|
.pathParams(Map.of("customerIbsNumber", customerIbsNumber))
|
||||||
.queryParams(params.toQueryString())
|
.queryParams(params.toQueryString())
|
||||||
.responseType(ApiResponse.class)
|
.responseType(ApiResponse.class)
|
||||||
.genericType(responseType)
|
.genericType(responseType)
|
||||||
.connectTimeout(dominionConfig.getTimeout().getConnect())
|
.connectTimeout(domainConfig.getTimeout().getConnect())
|
||||||
.readTimeout(dominionConfig.getTimeout().getResponse())
|
.readTimeout(domainConfig.getTimeout().getResponse())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
log.debug("Request configurado: {}", request);
|
log.debug("Request configurado: {}", request);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package com.banesco.module.legal_customer_product_directory.infrastructure.resource;
|
package com.banesco.module.legal_customer_product_directory.infrastructure.resource;
|
||||||
|
|
||||||
import com.banesco.common.application.helper.MessageResponseHelper;
|
import com.banesco.common.application.helper.MessageHelper;
|
||||||
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
import com.banesco.common.domain.exception.HttpStatusCodeException;
|
||||||
import com.banesco.common.domain.model.ApiResponse;
|
import com.banesco.common.domain.model.ApiResponse;
|
||||||
import com.banesco.common.domain.model.StatusResponse;
|
import com.banesco.common.domain.model.StatusResponse;
|
||||||
@ -30,15 +30,15 @@ import java.util.Objects;
|
|||||||
public class LegalCustomerProductDirectoryResource {
|
public class LegalCustomerProductDirectoryResource {
|
||||||
|
|
||||||
private final LegalCustomerProductDirectoryUseCase useCase;
|
private final LegalCustomerProductDirectoryUseCase useCase;
|
||||||
private final MessageResponseHelper messageResponseHelper;
|
private final MessageHelper messageHelper;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public LegalCustomerProductDirectoryResource(
|
public LegalCustomerProductDirectoryResource(
|
||||||
LegalCustomerProductDirectoryUseCase useCase,
|
LegalCustomerProductDirectoryUseCase useCase,
|
||||||
MessageResponseHelper messageResponseHelper
|
MessageHelper messageHelper
|
||||||
) {
|
) {
|
||||||
this.useCase = useCase;
|
this.useCase = useCase;
|
||||||
this.messageResponseHelper = messageResponseHelper;
|
this.messageHelper = messageHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@ -344,9 +344,9 @@ public class LegalCustomerProductDirectoryResource {
|
|||||||
.build()
|
.build()
|
||||||
)).build();
|
)).build();
|
||||||
} catch (HttpStatusCodeException e) {
|
} catch (HttpStatusCodeException e) {
|
||||||
return messageResponseHelper.handleException(e);
|
return messageHelper.handleException(e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return messageResponseHelper.handleGenericException(e);
|
return messageHelper.handleGenericException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8,13 +8,15 @@ quarkus:
|
|||||||
|
|
||||||
api:
|
api:
|
||||||
source-id: BLCPD
|
source-id: BLCPD
|
||||||
|
allowed:
|
||||||
|
app-id: '[{"appId":"DANIAPP","request":{"serviceType":"P2P","limitType":"REC","casheaIndicator":"NO"}}]'
|
||||||
read-messages:
|
read-messages:
|
||||||
from-props: true
|
from-props: true
|
||||||
busLogalCustomerProductDirectory:
|
bus-legal-customer-product-directory:
|
||||||
messages:
|
messages:
|
||||||
key: 'busLogalCustomerProductDirectory'
|
key: 'bus-legal-customer-product-directory'
|
||||||
content: '[{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validación no encontrado."},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":500,"statusCode":"500","description":"Uso interno"},{"backendCode":"100","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"ERROR","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"409","description":"Conflicto"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Error de dependencia"},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backend_code":"VRN04","http_code":"503","status_code":"VRN04","description":"Servicio en horario de mantenimiento","status":"error"},{"backend_code":"204","http_code":"200","status_code":"200","description":"Cliente sin productos","status":"ok"}]'
|
content: '[{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validación no encontrado."},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":500,"statusCode":"500","description":"Uso interno"},{"backendCode":"100","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"ERROR","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"409","description":"Conflicto"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Error de dependencia"},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backendCode":"VRN04","httpCode":"503","statusCode":"VRN04","description":"Servicio en horario de mantenimiento","status":"error"},{"backendCode":"204","httpCode":"200","statusCode":"200","description":"Cliente sin productos","status":"ok"}]'
|
||||||
rest-client:
|
rest-client:
|
||||||
dom-legal-customer-product-directory: '{"url":"http://localhost:8083/dom-legal-customer-product-directory/retrieve/{customerIbsNumber}","timeout":{"connect":20000,"response":20000}}'
|
dom-legal-customer-product-directory: '{"url":"http://localhost:8083/dom-legal-customer-product-directory/retrieve/{customerIbsNumber}","timeout":{"connect":10000,"response":10000}}'
|
||||||
security-trace: '{"url":"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save","timeout":{"connect":20000,"response":20000},"request":{"sp":"spAPI_Traza","eventCod":"CANCTARJ","bankCod":"01","curCod":"BS"}}'
|
security-trace: '{"url":"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save","timeout":{"connect":10000,"response":10000},"request":{"sp":"spAPI_Traza","eventCod":"CANCTARJ","bankCod":"01","curCod":"BS"}}'
|
||||||
service-status: '{"url":"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status","timeout":{"connect":20000,"response":20000},"request":{"applicationId": "","transactionId": "","bankService": {"bankCode": "01","serviceCode": "APIFI","eventCode": "P2PVUEL"}}}'
|
service-status: '{"url":"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status","timeout":{"connect":10000,"response":10000},"request":{"applicationId": "","transactionId": "","bankService": {"bankCode": "01","serviceCode": "APIFI","eventCode": "P2PVUEL"}}}'
|
||||||
Loading…
x
Reference in New Issue
Block a user