added logs in masterdataserviceimpl

This commit is contained in:
himanshu
2025-11-04 02:59:38 +05:30
parent f7c2669d11
commit 7d6db124e7
10 changed files with 282 additions and 110 deletions
@@ -13,6 +13,7 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; import com.billpaymentservice.bbps.dto.request.BillerDetailRequest;
import com.billpaymentservice.bbps.dto.request.ContactMasterRequest; import com.billpaymentservice.bbps.dto.request.ContactMasterRequest;
import com.billpaymentservice.bbps.dto.request.CustomParamRequest; import com.billpaymentservice.bbps.dto.request.CustomParamRequest;
import com.billpaymentservice.bbps.dto.request.DispositionRequest;
import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest; import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest;
import com.billpaymentservice.bbps.dto.request.MasterRequest; import com.billpaymentservice.bbps.dto.request.MasterRequest;
import com.billpaymentservice.bbps.service.MasterDataService; import com.billpaymentservice.bbps.service.MasterDataService;
@@ -52,8 +53,8 @@ public class MasterDataController {
@PostMapping(value = "/getDispostionDetail", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/getDispostionDetail", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> getDispostionDetail( public ResponseEntity<ResponseModel> getDispostionDetail(
@Validated @RequestBody ContactMasterRequest contactMasterRequest) { @Validated @RequestBody DispositionRequest dispositionDetailRequest) {
return ResponseEntity.ok(masterDataService.getDispositionDetails()); return ResponseEntity.ok(masterDataService.getDispositionDetails(dispositionDetailRequest));
} }
/** /**
@@ -5,10 +5,12 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ToString
public class DeviceDetail { public class DeviceDetail {
private List<Detail> detail; private List<Detail> detail;
@@ -25,41 +25,30 @@ public abstract class BaseClass {
@NotBlank(message = "Request ID cannot be null or blank") @NotBlank(message = "Request ID cannot be null or blank")
private String reqId; private String reqId;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String txnId; private String txnId;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private DeviceDetail deviceDetial; private DeviceDetail deviceDetial;
// ✅ 10 User Defined Fields (UDF1–UDF10) // ✅ 10 User Defined Fields (UDF1–UDF10)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf1; private String udf1;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf2; private String udf2;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf3; private String udf3;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf4; private String udf4;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf5; private String udf5;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf6; private String udf6;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf7; private String udf7;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf8; private String udf8;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf9; private String udf9;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String udf10; private String udf10;
} }
@@ -7,7 +7,7 @@ import lombok.ToString;
@Getter @Getter
@Setter @Setter
@ToString @ToString(callSuper = true)
public class BillerDetailRequest extends BaseClass{ public class BillerDetailRequest extends BaseClass{
@NotNull @NotNull
@@ -47,11 +47,17 @@ public class InboundTraceLog {
@Column(length = 255) @Column(length = 255)
private String remark; // error ya note private String remark; // error ya note
public InboundTraceLog(String requestId, String txnId, String apiName, String requestPayload) {
this.requestId = requestId; public InboundTraceLog(String requestId, String txnId, String apiName, String mid,
this.txnId = txnId; String orgId, String httpMethod, String requestPayload) {
this.apiName = apiName; this.requestId = requestId;
this.requestPayload = requestPayload; this.txnId = txnId;
this.requestTime = LocalDateTime.now(); this.apiName = apiName;
} this.mid = mid;
this.orgId = orgId;
this.httpMethod = httpMethod;
this.requestPayload = requestPayload;
this.requestTime = LocalDateTime.now();
this.createdAt = LocalDateTime.now();
}
} }
@@ -44,11 +44,15 @@ public class OutboundTraceLog {
@Column(length = 255) @Column(length = 255)
private String remark; private String remark;
public OutboundTraceLog(String txnId, String apiName, String endpointUrl, String requestPayload) { public OutboundTraceLog(String txnId, String requestId, String apiName,
this.txnId = txnId; String endpointUrl, String httpMethod, String requestPayload) {
this.apiName = apiName; this.txnId = txnId;
this.endpointUrl = endpointUrl; this.requestId = requestId;
this.requestPayload = requestPayload; this.apiName = apiName;
this.sendTime = LocalDateTime.now(); this.endpointUrl = endpointUrl;
} this.httpMethod = httpMethod;
this.requestPayload = requestPayload;
this.sendTime = LocalDateTime.now();
this.createdAt = LocalDateTime.now();
}
} }
@@ -39,4 +39,23 @@ public class GlobalExceptionHandler {
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
} }
}
// ✅ NEW: Handle ALL other exceptions (Generic Handler)
@ExceptionHandler(Exception.class)
public ResponseEntity<ResponseModel<?>> handleAllExceptions(Exception ex) {
// ✅ Internal logging (tumhare system ko pata chale)
System.err.println("INTERNAL SERVER ERROR: " + ex.getMessage());
ex.printStackTrace(); // Stack trace for debugging
// ✅ Client ko generic message
ResponseModel<?> response = new ResponseModel<>(
"Service temporarily unavailable. Please try again later.",
"FAILED",
HttpStatus.INTERNAL_SERVER_ERROR.value(),
null
);
return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -4,6 +4,7 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; import com.billpaymentservice.bbps.dto.request.BillerDetailRequest;
import com.billpaymentservice.bbps.dto.request.ContactMasterRequest; import com.billpaymentservice.bbps.dto.request.ContactMasterRequest;
import com.billpaymentservice.bbps.dto.request.CustomParamRequest; import com.billpaymentservice.bbps.dto.request.CustomParamRequest;
import com.billpaymentservice.bbps.dto.request.DispositionRequest;
import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest; import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest;
import com.billpaymentservice.bbps.dto.request.MasterRequest; import com.billpaymentservice.bbps.dto.request.MasterRequest;
import com.billpaymentservice.bbps.dto.request.MerchantRequestModel; import com.billpaymentservice.bbps.dto.request.MerchantRequestModel;
@@ -29,6 +30,6 @@ public interface MasterDataService {
public ResponseModel fetchInitiatingChannel(BillerDetailRequest requestModel); public ResponseModel fetchInitiatingChannel(BillerDetailRequest requestModel);
public ResponseModel getDispositionDetails(); public ResponseModel getDispositionDetails(DispositionRequest dispositionDetailRequest);
} }
@@ -1,3 +1,4 @@
// java
package com.billpaymentservice.bbps.serviceImpl; package com.billpaymentservice.bbps.serviceImpl;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -16,6 +17,7 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; import com.billpaymentservice.bbps.dto.request.BillerDetailRequest;
import com.billpaymentservice.bbps.dto.request.ContactMasterRequest; import com.billpaymentservice.bbps.dto.request.ContactMasterRequest;
import com.billpaymentservice.bbps.dto.request.CustomParamRequest; import com.billpaymentservice.bbps.dto.request.CustomParamRequest;
import com.billpaymentservice.bbps.dto.request.DispositionRequest;
import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest; import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest;
import com.billpaymentservice.bbps.dto.request.MasterRequest; import com.billpaymentservice.bbps.dto.request.MasterRequest;
import com.billpaymentservice.bbps.dto.response.AmountOptionsResponse; import com.billpaymentservice.bbps.dto.response.AmountOptionsResponse;
@@ -62,16 +64,16 @@ public class MasterDataServiceImpl implements MasterDataService {
private final BillerDataRepository billerDataRespository; private final BillerDataRepository billerDataRespository;
private static final Logger log = LoggerFactory.getLogger(MasterDataServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(MasterDataServiceImpl.class);
private final HttpService httpService; private final HttpService httpService;
private final ObjectMapper objectMapper = new ObjectMapper();
private final InboundTraceLogRepository inboundTraceLogRepository; private final InboundTraceLogRepository inboundTraceLogRepository;
private final OutboundTraceLogRepository outboundTraceLogRepository; private final OutboundTraceLogRepository outboundTraceLogRepository;
private final ObjectMapper objectMapper = new ObjectMapper();
public MasterDataServiceImpl(MerchantRepository merchantRegisterRepo, HttpService httpService, public MasterDataServiceImpl(MerchantRepository merchantRegisterRepo, HttpService httpService,
HttpClientApi httpClientApi, Helper helper, BillerDataRepository billerDataRespository, HttpClientApi httpClientApi, Helper helper, BillerDataRepository billerDataRespository,
DispositionRepository dispositionRepository, BharatConnectMasterRepository beneficiaryDetailsRepository, DispositionRepository dispositionRepository, BharatConnectMasterRepository beneficiaryDetailsRepository,
InboundTraceLogRepository inboundTraceLogRepository, InboundTraceLogRepository inboundTraceLogRepository,
OutboundTraceLogRepository outboundTraceLogRepository) { OutboundTraceLogRepository outboundTraceLogRepository) {
this.merchantRegisterRepo = merchantRegisterRepo; this.merchantRegisterRepo = merchantRegisterRepo;
this.httpService = httpService; this.httpService = httpService;
this.httpClientApi = httpClientApi; this.httpClientApi = httpClientApi;
@@ -82,35 +84,84 @@ public class MasterDataServiceImpl implements MasterDataService {
this.inboundTraceLogRepository = inboundTraceLogRepository; this.inboundTraceLogRepository = inboundTraceLogRepository;
this.outboundTraceLogRepository = outboundTraceLogRepository; this.outboundTraceLogRepository = outboundTraceLogRepository;
} }
/* ---------- Trace helper methods ---------- */
private InboundTraceLog createInboundLog(String requestId, String txnId, String apiName, String mid, String httpMethod, String requestPayload) {
InboundTraceLog inboundLog = new InboundTraceLog(requestId, txnId, apiName, mid == null ? "N/A" : mid, "BBPS_ORG", httpMethod, requestPayload == null ? "N/A" : requestPayload);
inboundTraceLogRepository.save(inboundLog);
return inboundLog;
}
private void updateInboundLogSuccess(InboundTraceLog inboundLog, String responsePayload, String responseCode) {
if (inboundLog == null) return;
inboundLog.setResponsePayload(responsePayload);
inboundLog.setResponseCode(responseCode);
inboundLog.setStatus("SUCCESS");
inboundLog.setResponseTime(LocalDateTime.now());
inboundTraceLogRepository.save(inboundLog);
}
private void updateInboundLogFailure(InboundTraceLog inboundLog, String responsePayload, String responseCode) {
if (inboundLog == null) return;
inboundLog.setResponsePayload(responsePayload);
inboundLog.setResponseCode(responseCode);
inboundLog.setStatus("FAILED");
inboundLog.setResponseTime(LocalDateTime.now());
inboundTraceLogRepository.save(inboundLog);
}
private OutboundTraceLog createOutboundLog(String txnId, String requestId, String apiName, String url, String httpMethod, String requestPayload) {
OutboundTraceLog outboundLog = new OutboundTraceLog(txnId, requestId, apiName, url, httpMethod, requestPayload == null ? "N/A" : requestPayload);
outboundTraceLogRepository.save(outboundLog);
return outboundLog;
}
private void updateOutboundLogResponse(OutboundTraceLog outboundLog, String responsePayload) {
if (outboundLog == null) return;
outboundLog.setResponsePayload(responsePayload);
outboundLog.setResponseReceiveTime(LocalDateTime.now());
outboundTraceLogRepository.save(outboundLog);
}
/* ---------- End helpers ---------- */
@Override @Override
public ResponseModel getMasterData(MasterRequest masterRequest) { public ResponseModel getMasterData(MasterRequest masterRequest) {
LOGGER.info("Request DTO: {}", masterRequest); LOGGER.info("Request DTO: {}", masterRequest);
String txnID = helper.generateTxnId(15);
String apiName = "GetMasterData";
String requestId =masterRequest.getReqId();
String requestJson = helper.convertObjectToJson(masterRequest);
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName, masterRequest.getMid(), "POST", requestJson);
try { try {
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
log.info("ResPONSE" + headersData); log.info("ResPONSE" + headersData);
if (headersData == null) { if (headersData == null) {
ResponseModel responseModel = new ResponseModel("Tenant Id Is Null", "Not Found", updateInboundLogFailure(inboundLog, "Tenant Id Is Null", "NOT_FOUND");
return new ResponseModel("Tenant Id Is Null", "Not Found",
BBPSConstant.BADREQUEST, headersData); BBPSConstant.BADREQUEST, headersData);
return responseModel;
} }
String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL + headersData.getTenantId(); String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL + headersData.getTenantId();
LOGGER.info("Calling external API: {}", fullUrl); LOGGER.info("Calling external API: {}", fullUrl);
OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> responseMap = httpService.getRequest(fullUrl); Map<String, String> responseMap = httpService.getRequest(fullUrl);
String responseData = responseMap.get("data"); String responseData = responseMap.get("data");
LOGGER.info("Response Data: {}", responseData); LOGGER.info("Response Data: {}", responseData);
ObjectMapper objectMapper = new ObjectMapper(); updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
// ✅ Same check as in getBillerByBillerId()
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode
@@ -124,105 +175,102 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} }
} }
@Override @Override
public ResponseModel getBillerByBillerId(BillerDetailRequest billerDetailRequest) { public ResponseModel getBillerByBillerId(BillerDetailRequest billerDetailRequest) {
String txnID = helper.generateTxnId(15); String txnID = helper.generateTxnId(15);
String apiName = "GetBillerByBillerId"; String apiName = "GetBillerByBillerId";
String requestId = billerDetailRequest.getReqId(); String requestId = billerDetailRequest.getReqId();
String fullUrl = masterRegisterUrl + BBPSConstant.BILLER_DATA_FETCH_URL + billerDetailRequest.getBillerId(); String billerId = billerDetailRequest.getBillerId();
String fullUrl = masterRegisterUrl + BBPSConstant.BILLER_DATA_FETCH_URL + billerId;
String requestJson = helper.convertObjectToJson(billerDetailRequest);
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName, billerDetailRequest.getMid(), "POST", requestJson);
// 🔹 Inbound Log (request received) OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
InboundTraceLog inboundLog = new InboundTraceLog(requestId, txnID, apiName, billerDetailRequest.toString());
inboundTraceLogRepository.save(inboundLog);
// 🔹 Outbound Log (before sending external API request)
OutboundTraceLog outboundLog = new OutboundTraceLog(txnID, apiName, fullUrl, "N/A");
outboundTraceLogRepository.save(outboundLog);
// 🔹 Send request
Map<String, String> responseMap = httpService.getRequest(fullUrl); Map<String, String> responseMap = httpService.getRequest(fullUrl);
String responseData = responseMap.get("data"); String responseData = responseMap.get("data");
log.info("data is :{}", responseData);
outboundLog.setResponsePayload(responseData); updateOutboundLogResponse(outboundLog, responseData);
outboundLog.setResponseReceiveTime(LocalDateTime.now());
outboundTraceLogRepository.save(outboundLog);
// 🔹 Parse the response
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> dataMap;
try { try {
dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {}); Map<String, Object> dataMap = objectMapper.readValue(responseData,
} catch (Exception e) { new TypeReference<Map<String, Object>>() {});
// 🟥 Invalid JSON case — update inbound log before throwing
inboundLog.setResponsePayload("Invalid JSON: " + e.getMessage()); if (!dataMap.containsKey("generalResp")) {
inboundLog.setResponseCode("FAILED"); updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
inboundLog.setResponseTime(LocalDateTime.now()); throw new CustomException(
inboundTraceLogRepository.save(inboundLog); String.valueOf(dataMap.get("message")),
throw new CustomException("Invalid JSON received from upstream", "FAILED", 400, e.getMessage()); String.valueOf(dataMap.get("status")),
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
String.valueOf(dataMap.get("remarks"))
);
}
BillerDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillerDataResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
BillerDetails entity = mapper.map(responseWrapper.getBillerDAO(), BillerDetails.class);
EntityRelationshipUtil.linkBillerRelationships(entity);
ResponseModel responseModel = new ResponseModel(
generalResp.getMessage(),
generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()),
responseWrapper
);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel;
} catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API");
} }
// 🔹 If generalResp is missing — API returned error response
if (!dataMap.containsKey("generalResp")) {
// 🟥 Update inbound log before throwing
inboundLog.setResponsePayload(responseData);
inboundLog.setResponseCode(String.valueOf(dataMap.get("status")));
inboundLog.setResponseTime(LocalDateTime.now());
inboundTraceLogRepository.save(inboundLog);
throw new CustomException(
String.valueOf(dataMap.get("message")),
String.valueOf(dataMap.get("status")),
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
String.valueOf(dataMap.get("remarks"))
);
}
// 🔹 Otherwise, success flow
BillerDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillerDataResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
inboundLog.setResponsePayload(responseData);
inboundLog.setResponseCode(generalResp.getStatus());
inboundLog.setResponseTime(LocalDateTime.now());
inboundTraceLogRepository.save(inboundLog);
return new ResponseModel(
generalResp.getMessage(),
generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()),
responseWrapper
);
} }
@Override @Override
public ResponseModel getCustomerParamByBillerId(CustomParamRequest customerParamRequest) { public ResponseModel getCustomerParamByBillerId(CustomParamRequest customerParamRequest) {
String txnID = helper.generateTxnId(15);
String apiName = "GetCustomerParamByBillerId";
String requestId = customerParamRequest.getReqId();
String requestJson = helper.convertObjectToJson(customerParamRequest);
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName,customerParamRequest.getMid(), "POST", requestJson);
try { try {
String billerId = customerParamRequest.getBillerId(); String billerId = customerParamRequest.getBillerId();
String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMPARAM_URL + billerId; String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMPARAM_URL + billerId;
OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> responseMap = httpService.getRequest(fullUrl); Map<String, String> responseMap = httpService.getRequest(fullUrl);
String responseData = responseMap.get("data"); String responseData = responseMap.get("data");
log.info("data is :{}", responseData); log.info("data is :{}", responseData);
ObjectMapper objectMapper = new ObjectMapper(); updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -235,9 +283,12 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} }
@@ -245,7 +296,17 @@ public class MasterDataServiceImpl implements MasterDataService {
@Override @Override
public ResponseModel getContactMaster(ContactMasterRequest contactMasterRequest) { public ResponseModel getContactMaster(ContactMasterRequest contactMasterRequest) {
/*
* String txnID = helper.generateTxnId(15); String apiName = "GetContactMaster";
* String requestId = contactMasterRequest != null ?
* contactMasterRequest.getReqId() : "N/A"; String requestJson =
* helper.convertObjectToJson(contactMasterRequest); InboundTraceLog inboundLog
* = createInboundLog(requestId, txnID, apiName, contactMasterRequest != null ?
* contactMasterRequest.getMid() : "N/A", "POST", requestJson);
*
* // Implementation not present previously - create inbound log and return
* empty response updateInboundLogSuccess(inboundLog, "N/A", "SUCCESS");
*/
return new ResponseModel(); return new ResponseModel();
} }
@@ -253,12 +314,19 @@ public class MasterDataServiceImpl implements MasterDataService {
public ResponseModel fetchMasterDataCategoryWise(MasterCategoryRequest masterRequest) { public ResponseModel fetchMasterDataCategoryWise(MasterCategoryRequest masterRequest) {
LOGGER.info("Fetching Master Data Category-wise " + masterRequest); LOGGER.info("Fetching Master Data Category-wise " + masterRequest);
String txnID = helper.generateTxnId(15);
String apiName = "FetchMasterDataCategoryWise";
String requestId = masterRequest.getReqId();
String requestJson = helper.convertObjectToJson(masterRequest);
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName,masterRequest.getMid(), "POST", requestJson);
try { try {
String validateMerchant = helper.validateMerchant(masterRequest); String validateMerchant = helper.validateMerchant(masterRequest);
if (!"Valid".equalsIgnoreCase(validateMerchant)) { if (!"Valid".equalsIgnoreCase(validateMerchant)) {
LOGGER.warn("Merchant validation failed: {}", validateMerchant); LOGGER.warn("Merchant validation failed: {}", validateMerchant);
updateInboundLogFailure(inboundLog, validateMerchant, "INVALID_MERCHANT");
return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null);
} }
@@ -266,18 +334,20 @@ public class MasterDataServiceImpl implements MasterDataService {
BBPSConstant.BILLER_URL, masterRequest.getBillerName(), masterRequest.getCategory(), BBPSConstant.BILLER_URL, masterRequest.getBillerName(), masterRequest.getCategory(),
masterRequest.getPageStart(), masterRequest.getPageEnd()); masterRequest.getPageStart(), masterRequest.getPageEnd());
OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> responseMap = httpService.getRequest(fullUrl); Map<String, String> responseMap = httpService.getRequest(fullUrl);
String responseData = responseMap.get("data"); String responseData = responseMap.get("data");
LOGGER.info("Response Data: {}", responseData); LOGGER.info("Response Data: {}", responseData);
ObjectMapper objectMapper = new ObjectMapper(); updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
// ✅ Same check as in getBillerByBillerId()
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode
@@ -291,27 +361,36 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} }
} }
@Override @Override
public ResponseModel getDispositionDetails() { public ResponseModel getDispositionDetails(DispositionRequest dispositionDetailRequest) {
String txnID = helper.generateTxnId(15);
String apiName = "GetDispositionDetails";
String requestId = dispositionDetailRequest.getReqId();;
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName,dispositionDetailRequest.getMid() , "GET", "N/A");
String fullUrl = masterRegisterUrl + BBPSConstant.DISPOSTION_URL; String fullUrl = masterRegisterUrl + BBPSConstant.DISPOSTION_URL;
OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> responseMap = httpService.getRequest(fullUrl); Map<String, String> responseMap = httpService.getRequest(fullUrl);
String responseData = responseMap.get("data"); String responseData = responseMap.get("data");
ObjectMapper objectMapper = new ObjectMapper(); updateOutboundLogResponse(outboundLog, responseData);
try { try {
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -337,37 +416,48 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} }
} }
@Override @Override
public ResponseModel fetchCustomerParamGroup(BillerDetailRequest requestModel) { public ResponseModel fetchCustomerParamGroup(BillerDetailRequest requestModel) {
LOGGER.info("Fetching Master Data Category-wise for MID={}", requestModel.getMid()); LOGGER.info("Fetching Master Data Category-wise for MID={}", requestModel.getMid());
String txnID = helper.generateTxnId(15);
String apiName = "FetchCustomerParamGroup";
String requestId = requestModel.getReqId();
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName,requestModel.getMid() , "POST", helper.convertObjectToJson(requestModel));
try { try {
String validateMerchant = helper.validateMerchant(requestModel); String validateMerchant = helper.validateMerchant(requestModel);
if (!"Valid".equalsIgnoreCase(validateMerchant)) { if (!"Valid".equalsIgnoreCase(validateMerchant)) {
LOGGER.warn("Merchant validation failed: {}", validateMerchant); LOGGER.warn("Merchant validation failed: {}", validateMerchant);
updateInboundLogFailure(inboundLog, validateMerchant, "INVALID_MERCHANT");
return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null);
} }
String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMER_PARAM_GROUP + requestModel.getBillerId(); String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMER_PARAM_GROUP + requestModel.getBillerId();
// LOGGER.info("Calling Master API: {}", fullUrl); OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> apiResponse = httpService.getRequest(fullUrl); Map<String, String> apiResponse = httpService.getRequest(fullUrl);
String responseData = apiResponse.get("data").toString(); String responseData = apiResponse.get("data").toString();
updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -381,10 +471,13 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} }
@@ -393,26 +486,36 @@ public class MasterDataServiceImpl implements MasterDataService {
@Override @Override
public ResponseModel fetchAllMasterAmountOption(BillerDetailRequest requestModel) { public ResponseModel fetchAllMasterAmountOption(BillerDetailRequest requestModel) {
LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid()); LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid());
String txnID = helper.generateTxnId(15);
String apiName = "FetchAllMasterAmountOption";
String requestId = requestModel.getReqId();
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName, requestModel.getMid(), "POST", helper.convertObjectToJson(requestModel));
try { try {
String validateMerchant = helper.validateMerchant(requestModel); String validateMerchant = helper.validateMerchant(requestModel);
if (!"Valid".equalsIgnoreCase(validateMerchant)) { if (!"Valid".equalsIgnoreCase(validateMerchant)) {
LOGGER.warn("Merchant validation failed: {}", validateMerchant); LOGGER.warn("Merchant validation failed: {}", validateMerchant);
updateInboundLogFailure(inboundLog, validateMerchant, "INVALID_MERCHANT");
return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null);
} }
String fullUrl = masterRegisterUrl + BBPSConstant.AMOUNT_OPTIONS + requestModel.getBillerId(); String fullUrl = masterRegisterUrl + BBPSConstant.AMOUNT_OPTIONS + requestModel.getBillerId();
// LOGGER.info("Calling Master API: {}", fullUrl); OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> apiResponse = httpService.getRequest(fullUrl); Map<String, String> apiResponse = httpService.getRequest(fullUrl);
log.info("Response" + apiResponse); log.info("Response" + apiResponse);
String responseData = apiResponse.get("data").toString(); String responseData = apiResponse.get("data").toString();
updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -425,10 +528,13 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} catch (CustomException e) { } catch (CustomException e) {
LOGGER.error("Custom Exception: {}", e.getMessage()); LOGGER.error("Custom Exception: {}", e.getMessage());
@@ -439,26 +545,36 @@ public class MasterDataServiceImpl implements MasterDataService {
@Override @Override
public ResponseModel fetchPlanCategorie(BillerDetailRequest requestModel) { public ResponseModel fetchPlanCategorie(BillerDetailRequest requestModel) {
LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid()); LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid());
String txnID = helper.generateTxnId(15);
String apiName = "FetchPlanCategorie";
String requestId = requestModel.getReqId();
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName, requestModel.getMid() , "POST", helper.convertObjectToJson(requestModel));
try { try {
String validateMerchant = helper.validateMerchant(requestModel); String validateMerchant = helper.validateMerchant(requestModel);
if (!"Valid".equalsIgnoreCase(validateMerchant)) { if (!"Valid".equalsIgnoreCase(validateMerchant)) {
LOGGER.warn("Merchant validation failed: {}", validateMerchant); LOGGER.warn("Merchant validation failed: {}", validateMerchant);
updateInboundLogFailure(inboundLog, validateMerchant, "INVALID_MERCHANT");
return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null);
} }
String fullUrl = masterRegisterUrl + BBPSConstant.PLAN_CATEGORIES + requestModel.getBillerId(); String fullUrl = masterRegisterUrl + BBPSConstant.PLAN_CATEGORIES + requestModel.getBillerId();
// LOGGER.info("Calling Master API: {}", fullUrl); OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> apiResponse = httpService.getRequest(fullUrl); Map<String, String> apiResponse = httpService.getRequest(fullUrl);
log.info("Response" + apiResponse); log.info("Response" + apiResponse);
String responseData = apiResponse.get("data").toString(); String responseData = apiResponse.get("data").toString();
updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -471,10 +587,13 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} catch (CustomException e) { } catch (CustomException e) {
LOGGER.error("Custom Exception: {}", e.getMessage()); LOGGER.error("Custom Exception: {}", e.getMessage());
@@ -485,26 +604,38 @@ public class MasterDataServiceImpl implements MasterDataService {
@Override @Override
public ResponseModel fetchInitiatingChannel(BillerDetailRequest requestModel) { public ResponseModel fetchInitiatingChannel(BillerDetailRequest requestModel) {
LOGGER.info("Fetching Initiating Channel List for MID={}", requestModel.getMid()); LOGGER.info("Fetching Initiating Channel List for MID={}", requestModel.getMid());
String txnID = helper.generateTxnId(15);
String apiName = "FetchInitiatingChannel";
String requestId =requestModel.getReqId();
InboundTraceLog inboundLog = createInboundLog(requestId, txnID, apiName, requestModel.getMid(), "POST", helper.convertObjectToJson(requestModel));
try { try {
String validateMerchant = helper.validateMerchant(requestModel); String validateMerchant = helper.validateMerchant(requestModel);
if (!"Valid".equalsIgnoreCase(validateMerchant)) { if (!"Valid".equalsIgnoreCase(validateMerchant)) {
LOGGER.warn("Merchant validation failed: {}", validateMerchant); LOGGER.warn("Merchant validation failed: {}", validateMerchant);
updateInboundLogFailure(inboundLog, validateMerchant, "INVALID_MERCHANT");
return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null);
} }
String fullUrl = masterRegisterUrl + BBPSConstant.INITIATING_CHANNEL; String fullUrl = masterRegisterUrl + BBPSConstant.INITIATING_CHANNEL;
LOGGER.info("Calling Master API: {}", fullUrl); LOGGER.info("Calling Master API: {}", fullUrl);
OutboundTraceLog outboundLog = createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
Map<String, String> apiResponse = httpService.getRequest(fullUrl); Map<String, String> apiResponse = httpService.getRequest(fullUrl);
log.info("Response" + apiResponse); log.info("Response" + apiResponse);
String responseData = apiResponse.get("data").toString(); String responseData = apiResponse.get("data").toString();
updateOutboundLogResponse(outboundLog, responseData);
Map<String, Object> dataMap = objectMapper.readValue(responseData, Map<String, Object> dataMap = objectMapper.readValue(responseData,
new TypeReference<Map<String, Object>>() { new TypeReference<Map<String, Object>>() {
}); });
if (!dataMap.containsKey("generalResp")) { if (!dataMap.containsKey("generalResp")) {
updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
throw new CustomException(String.valueOf(dataMap.get("message")), // message throw new CustomException(String.valueOf(dataMap.get("message")), // message
String.valueOf(dataMap.get("status")), // status String.valueOf(dataMap.get("status")), // status
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int)
@@ -517,10 +648,13 @@ public class MasterDataServiceImpl implements MasterDataService {
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
return responseModel; return responseModel;
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
log.error("Error parsing responseData JSON: {}", e.getMessage()); log.error("Error parsing responseData JSON: {}", e.getMessage());
updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API"); throw new CustomException("Invalid JSON received from API");
} catch (CustomException e) { } catch (CustomException e) {
LOGGER.error("Custom Exception: {}", e.getMessage()); LOGGER.error("Custom Exception: {}", e.getMessage());
@@ -9,10 +9,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.billpaymentservice.bbps.dto.ResponseModel; import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillerDetailRequest;
import com.billpaymentservice.bbps.dto.request.MerchantRequestModel; import com.billpaymentservice.bbps.dto.request.MerchantRequestModel;
import com.billpaymentservice.bbps.entites.BBPSMerchantValidation; import com.billpaymentservice.bbps.entites.BBPSMerchantValidation;
import com.billpaymentservice.bbps.exception.CustomException; import com.billpaymentservice.bbps.exception.CustomException;
import com.billpaymentservice.bbps.repository.MerchantRepository; import com.billpaymentservice.bbps.repository.MerchantRepository;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@Component @Component
@@ -23,6 +26,8 @@ public class Helper {
private static final String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private static final String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static final SecureRandom secureRandom = new SecureRandom(); private static final SecureRandom secureRandom = new SecureRandom();
private final ObjectMapper objectMapper = new ObjectMapper();
@Autowired @Autowired
private MerchantRepository merchantRegisterRepo; private MerchantRepository merchantRegisterRepo;
@@ -125,4 +130,15 @@ public class Helper {
} }
return sb.toString(); // Prefix return sb.toString(); // Prefix
} }
} public String convertObjectToJson(Object obj) {
if (obj == null) return "null";
try {
return new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(obj);
} catch (com.fasterxml.jackson.core.JsonProcessingException e) {
// log appropriately (use your existing logger)
System.err.println("JSON conversion failed: " + e.getMessage());
return "{}"; // or "N/A" depending on your needs
}
}
}