diff --git a/src/main/java/com/billpaymentservice/bbps/dto/CustomParamDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/CustomParamDTO.java index 1fa4940..5b10823 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/CustomParamDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/CustomParamDTO.java @@ -6,11 +6,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; @Getter @Setter @AllArgsConstructor @NoArgsConstructor +@ToString public class CustomParamDTO { private String customParamName; private String dataType; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java index 6588e8b..4086d95 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java @@ -1,10 +1,13 @@ package com.billpaymentservice.bbps.dto; import lombok.Getter; import lombok.Setter; +import lombok.ToString; + import java.util.List; @Getter @Setter +@ToString public class CustomerParamGroupsDTO { private List groups; } diff --git a/src/main/java/com/billpaymentservice/bbps/dto/request/CustomParamRequest.java b/src/main/java/com/billpaymentservice/bbps/dto/request/CustomParamRequest.java index 64010f5..8bb1e68 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/request/CustomParamRequest.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/request/CustomParamRequest.java @@ -5,11 +5,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; @Getter @Setter @NoArgsConstructor @AllArgsConstructor +@ToString public class CustomParamRequest extends BaseClass { @NotNull diff --git a/src/main/java/com/billpaymentservice/bbps/dto/request/DispositionRequest.java b/src/main/java/com/billpaymentservice/bbps/dto/request/DispositionRequest.java index 33df692..b030894 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/request/DispositionRequest.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/request/DispositionRequest.java @@ -1,5 +1,5 @@ package com.billpaymentservice.bbps.dto.request; public class DispositionRequest extends BaseClass { - + } diff --git a/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java b/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java index 102b1c7..99b370b 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java @@ -11,11 +11,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; @Getter @Setter @AllArgsConstructor @NoArgsConstructor +@ToString public class CustomParamResp { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private GeneralResp generalResp; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java index e6b782e..fe3bafe 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java @@ -3,10 +3,12 @@ package com.billpaymentservice.bbps.entites; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; +import lombok.ToString; @Getter @Setter @Entity +@ToString @Table(name = "custom_param") public class CustomParam { diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java index 2bc7877..b032baf 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java @@ -4,6 +4,7 @@ import jakarta.persistence.*; import jakarta.validation.constraints.*; import lombok.Getter; import lombok.Setter; +import lombok.ToString; import java.util.List; @@ -11,6 +12,7 @@ import java.util.List; @Setter @Entity @Table(name = "customer_param") +@ToString public class CustomerParam { @Id diff --git a/src/main/java/com/billpaymentservice/bbps/repository/CustomParamRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/CustomParamRepository.java new file mode 100644 index 0000000..31737e2 --- /dev/null +++ b/src/main/java/com/billpaymentservice/bbps/repository/CustomParamRepository.java @@ -0,0 +1,9 @@ +package com.billpaymentservice.bbps.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.billpaymentservice.bbps.entites.CustomParam; + +public interface CustomParamRepository extends JpaRepository { + +} diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java index facee8a..01d4bf5 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java @@ -182,7 +182,7 @@ public class AgentServiceImpl implements AgentService { if ("INPROGRESS".equalsIgnoreCase(status)) { if (System.currentTimeMillis() - startTime > maxWaitTimeMs) { helper.updateInboundLogFailure(inboundLog, "Timeout after 40 seconds", "FAILED"); - throw new CustomException("Timeout waiting for bill fetch completion", "FAILED", 408, "Bill fetch still in progress"); + throw new CustomException("Timeout", "FAILED", 408, "Bill fetch still in progress"); } Thread.sleep(intervalMs); @@ -207,13 +207,7 @@ public class AgentServiceImpl implements AgentService { Thread.currentThread().interrupt(); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "INTERRUPTED"); throw new CustomException("Thread interrupted during bill status check"); - } catch (CustomException ce) { - throw ce; - } catch (Exception e) { - log.error("❌ Exception in fetchBillById(): {}", e.getMessage(), e); - helper.updateInboundLogFailure(inboundLog, e.getMessage(), "EXCEPTION"); - throw new CustomException("Bill Fetch by ID failed: " + e.getMessage()); - } + } } } diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java index 4442806..90565ae 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java @@ -12,6 +12,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; + +import com.billpaymentservice.bbps.dto.CustomParamDTO; import com.billpaymentservice.bbps.dto.GeneralResp; import com.billpaymentservice.bbps.dto.MasterApiResponse; import com.billpaymentservice.bbps.dto.ResponseModel; @@ -33,12 +35,14 @@ import com.billpaymentservice.bbps.dto.response.PlanResponse; import com.billpaymentservice.bbps.dto.response.PlaneCategoriesResponse; import com.billpaymentservice.bbps.entites.BharatConnectMaster; import com.billpaymentservice.bbps.entites.BillerDetails; +import com.billpaymentservice.bbps.entites.CustomParam; import com.billpaymentservice.bbps.entites.DispositionDetails; import com.billpaymentservice.bbps.entites.InboundTraceLog; import com.billpaymentservice.bbps.entites.OutboundTraceLog; import com.billpaymentservice.bbps.exception.CustomException; import com.billpaymentservice.bbps.repository.BharatConnectMasterRepository; import com.billpaymentservice.bbps.repository.BillerDataRepository; +import com.billpaymentservice.bbps.repository.CustomParamRepository; import com.billpaymentservice.bbps.repository.DispositionRepository; import com.billpaymentservice.bbps.repository.InboundTraceLogRepository; import com.billpaymentservice.bbps.repository.MerchantRepository; @@ -70,12 +74,14 @@ public class MasterDataServiceImpl implements MasterDataService { private final ObjectMapper objectMapper = new ObjectMapper(); private final InboundTraceLogRepository inboundTraceLogRepository; private final OutboundTraceLogRepository outboundTraceLogRepository; + private final CustomParamRepository customParamReposiotory; public MasterDataServiceImpl(MerchantRepository merchantRegisterRepo, HttpService httpService, HttpClientApi httpClientApi, Helper helper, BillerDataRepository billerDataRespository, DispositionRepository dispositionRepository, BharatConnectMasterRepository beneficiaryDetailsRepository, InboundTraceLogRepository inboundTraceLogRepository, - OutboundTraceLogRepository outboundTraceLogRepository) { + OutboundTraceLogRepository outboundTraceLogRepository, + CustomParamRepository customParamReposiotory) { this.merchantRegisterRepo = merchantRegisterRepo; this.httpService = httpService; this.httpClientApi = httpClientApi; @@ -85,6 +91,7 @@ public class MasterDataServiceImpl implements MasterDataService { this.beneficiaryDetailsRepository = beneficiaryDetailsRepository; this.inboundTraceLogRepository = inboundTraceLogRepository; this.outboundTraceLogRepository = outboundTraceLogRepository; + this.customParamReposiotory=customParamReposiotory; } @@ -96,6 +103,7 @@ public class MasterDataServiceImpl implements MasterDataService { String apiName = "GetMasterData"; String requestId = masterRequest.getReqId(); String requestJson = helper.convertObjectToJson(masterRequest); + InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, masterRequest.getMid(), "POST", requestJson); @@ -126,13 +134,10 @@ public class MasterDataServiceImpl implements MasterDataService { Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); LOGGER.info("Response Data: {}", responseData); - - helper.updateOutboundLogResponse(outboundLog, responseData); - + helper.updateOutboundLogResponse(outboundLog, responseData); Map dataMap = objectMapper.readValue(responseData, new TypeReference>() { }); - if (!dataMap.containsKey("generalResp")) { helper.updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status"))); throw new CustomException(String.valueOf(dataMap.get("message")), // message @@ -156,22 +161,18 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException ex) { - LOGGER.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception - } + } } @Override public ResponseModel getBillerByBillerId(BillerDetailRequest billerDetailRequest) { - + LOGGER.info("Fetching biller data for billerId={}", billerDetailRequest.getBillerId()); helper.validateMerchant(billerDetailRequest.getMid()); String txnID = helper.generateTxnId(15); String apiName = "GetBillerByBillerId"; String requestId = billerDetailRequest.getReqId(); String billerId = billerDetailRequest.getBillerId(); String fullUrl = masterRegisterUrl + BBPSConstant.BILLER_DATA_FETCH_URL + billerId; - String requestJson = helper.convertObjectToJson(billerDetailRequest); InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, billerDetailRequest.getMid(), "POST", requestJson); @@ -180,47 +181,40 @@ public class MasterDataServiceImpl implements MasterDataService { Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); - log.info("data is :{}", responseData); - + log.info("fetched data from api is :{}", responseData); helper.updateOutboundLogResponse(outboundLog, responseData); - try { Map dataMap = objectMapper.readValue(responseData, new TypeReference>() { }); - if (!dataMap.containsKey("generalResp")) { helper.updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status"))); 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"))); } - 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); + EntityRelationshipUtil.linkBillerRelationships(entity);// linking nesting entity foreign key helper.saveOrUpdateBillerData(entity); - ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()), responseWrapper); - helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); - return responseModel; } catch (JsonProcessingException e) { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } - + } } @Override public ResponseModel getCustomerParamByBillerId(CustomParamRequest customerParamRequest) { + + LOGGER.info("Fetching CustomerParam for billerId={}", customerParamRequest.getBillerId()); String txnID = helper.generateTxnId(15); String apiName = "GetCustomerParamByBillerId"; @@ -231,12 +225,6 @@ public class MasterDataServiceImpl implements MasterDataService { try { helper.validateMerchant(customerParamRequest.getMid()); - -// if (!"Valid".equalsIgnoreCase(validateMerchant)) { -// LOGGER.warn("Merchant validation failed: {}", validateMerchant); -// return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); -// } - String billerId = customerParamRequest.getBillerId(); String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMPARAM_URL + billerId; @@ -258,13 +246,29 @@ public class MasterDataServiceImpl implements MasterDataService { Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) String.valueOf(dataMap.get("remarks"))); } - + CustomParamResp responseWrapper = objectMapper.convertValue(dataMap, CustomParamResp.class); - GeneralResp generalResp = responseWrapper.getGeneralResp(); + List customParams = responseWrapper.getCustomParamResp(); + + GeneralResp generalResp = responseWrapper.getGeneralResp(); + List customParam = responseWrapper.getCustomParamResp(); + ModelMapper mapper = new ModelMapper(); + mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + + // Map DTOs to entities + List entities = customParams.stream() + .map(dto -> mapper.map(dto, CustomParam.class)) + .collect(Collectors.toList()); + + // Debug print + entities.forEach(System.out::println); + + // Save all to DB + customParamReposiotory.saveAll(entities); + ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()), responseWrapper); - helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); return responseModel; @@ -272,33 +276,26 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException ex) { - LOGGER.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception } - } @Override public ResponseModel getContactMaster(ContactMasterRequest contactMasterRequest) { - return new ResponseModel(); + return new ResponseModel(); //things not comming from api } @Override public ResponseModel fetchMasterDataCategoryWise(MasterCategoryRequest 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 = helper.createInboundLog(requestId, txnID, apiName, masterRequest.getMid(), "POST", requestJson); - try { helper.validateMerchant(masterRequest.getMid()); - String fullUrl = String.format("%s%s?billerName=%s&category=%s&page=%d&pagesize=%d", masterRegisterUrl, BBPSConstant.BILLER_URL, masterRequest.getBillerName(), masterRequest.getCategory(), masterRequest.getPageStart(), masterRequest.getPageEnd()); @@ -337,9 +334,6 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException ex) { - LOGGER.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception } } @@ -348,7 +342,9 @@ public class MasterDataServiceImpl implements MasterDataService { String txnID = helper.generateTxnId(15); String apiName = "GetDispositionDetails"; String requestId = dispositionDetailRequest.getReqId(); - ; + helper.validateMerchant(dispositionDetailRequest.getMid()); + + InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, dispositionDetailRequest.getMid(), "GET", "N/A"); @@ -359,7 +355,7 @@ public class MasterDataServiceImpl implements MasterDataService { helper.updateOutboundLogResponse(outboundLog, responseData); try { - + ObjectMapper objectMapper = new ObjectMapper(); Map dataMap = objectMapper.readValue(responseData, @@ -399,10 +395,7 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException ex) { - LOGGER.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception - } + } } @Override @@ -452,10 +445,7 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException ex) { - LOGGER.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception - } + } } @@ -507,9 +497,6 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException e) { - LOGGER.error("Custom Exception: {}", e.getMessage()); - throw e; // Rethrow custom exceptions to be handled by the controller } } @@ -562,10 +549,7 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException e) { - LOGGER.error("Custom Exception: {}", e.getMessage()); - throw e; // Rethrow custom exceptions to be handled by the controller - } + } } @Override @@ -618,10 +602,7 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException e) { - LOGGER.error("Custom Exception: {}", e.getMessage()); - throw e; // Rethrow custom exceptions to be handled by the controller - } + } } public ResponseModel fetchPlanByCategories(PlanRequest requestModel) { @@ -690,11 +671,6 @@ public class MasterDataServiceImpl implements MasterDataService { log.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } catch (CustomException e) { - - LOGGER.error("Custom Exception: {}", e.getMessage()); - helper.updateInboundLogFailure(inboundLog, e.getMessage(), "Custom_exception"); - throw e; // Rethrow for controller-level handling } } diff --git a/src/main/java/com/billpaymentservice/bbps/util/Helper.java b/src/main/java/com/billpaymentservice/bbps/util/Helper.java index b27e8c1..32b3a25 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/Helper.java +++ b/src/main/java/com/billpaymentservice/bbps/util/Helper.java @@ -2,6 +2,7 @@ package com.billpaymentservice.bbps.util; import java.security.SecureRandom; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.Optional; import java.util.function.Function;