From 43baedfecdf5e3718ba3e8b932536b3798957d22 Mon Sep 17 00:00:00 2001 From: Lincpay Tech Date: Mon, 10 Nov 2025 10:05:43 +0530 Subject: [PATCH] improved logs --- .../bbps/audit/Auditable.java | 4 +- .../bbps/config/RestClientConfig.java | 11 +- .../bbps/controller/AgentController.java | 5 +- .../bbps/controller/PaymentController.java | 1 - .../bbps/dto/AmountOptionDTO.java | 4 +- .../bbps/dto/BillerDTO.java | 2 + .../bbps/dto/BillerResponseParamsDTO.java | 3 +- .../bbps/dto/CustomerParamDTO.java | 4 +- .../bbps/dto/CustomerParamGroupsDTO.java | 4 +- .../bbps/dto/DispositionsDTO.java | 1 - .../billpaymentservice/bbps/dto/GroupDTO.java | 3 +- .../bbps/dto/PaymentChannelDTO.java | 1 - .../bbps/dto/PaymentModeDTO.java | 4 +- .../bbps/dto/request/BillPaymentRequest.java | 1 + .../bbps/dto/request/MasterRequest.java | 1 - .../dto/response/BillPaymentResponse.java | 1 + .../bbps/dto/response/BillerDataResponse.java | 1 - .../bbps/dto/response/CustomParamResp.java | 3 +- .../bbps/entites/AdditionalInfo.java | 11 +- .../bbps/entites/AgentFundTransfer.java | 2 - .../bbps/entites/AgentFundTransferEntity.java | 7 +- .../bbps/entites/AmountOption.java | 15 +- .../bbps/entites/BharatConnectMaster.java | 5 - .../bbps/entites/BillInitiate.java | 9 +- .../bbps/entites/BillMaster.java | 3 - .../bbps/entites/BillPayment.java | 9 +- .../bbps/entites/BillerDetails.java | 19 +- .../entites/BillerPlanResponseParams.java | 16 +- .../bbps/entites/BillerResponse.java | 2 - .../bbps/entites/BillerResponseParams.java | 14 +- .../bbps/entites/CustomParam.java | 7 +- .../bbps/entites/CustomerParam.java | 19 +- .../bbps/entites/CustomerParamDAO.java | 6 +- .../bbps/entites/CustomerParamGroups.java | 16 +- .../bbps/entites/DispositionDetails.java | 6 +- .../bbps/entites/Group.java | 18 +- .../bbps/entites/InterchangeFee.java | 16 +- .../bbps/entites/InterchangeFeeConf.java | 18 +- .../bbps/entites/InterchangeFeeDetail.java | 9 +- .../bbps/entites/PaymentChannel.java | 13 +- .../bbps/entites/PaymentMode.java | 2 - .../bbps/entites/RemitterIdentity.java | 10 +- .../exception/GlobalExceptionHandler.java | 70 ++- .../BharatConnectMasterRepository.java | 1 - .../bbps/repository/BillerDataRepository.java | 5 +- .../bbps/service/MasterDataService.java | 3 - .../bbps/service/PaymentService.java | 1 - .../bbps/serviceImpl/AgentServiceImpl.java | 468 +++++++++--------- .../bbps/serviceImpl/HttpService.java | 2 - .../serviceImpl/MasterDataServiceImpl.java | 100 ++-- .../bbps/serviceImpl/PaymentServiceImpl.java | 251 +++++----- .../bbps/util/EntityRelationshipUtil.java | 5 +- .../billpaymentservice/bbps/util/Helper.java | 22 +- 53 files changed, 662 insertions(+), 572 deletions(-) diff --git a/src/main/java/com/billpaymentservice/bbps/audit/Auditable.java b/src/main/java/com/billpaymentservice/bbps/audit/Auditable.java index 2bc6544..2039a63 100644 --- a/src/main/java/com/billpaymentservice/bbps/audit/Auditable.java +++ b/src/main/java/com/billpaymentservice/bbps/audit/Auditable.java @@ -1,16 +1,14 @@ package com.billpaymentservice.bbps.audit; import java.io.Serializable; -import java.util.Date; +import java.util.Date; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; - import jakarta.persistence.Column; - import jakarta.persistence.MappedSuperclass; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; diff --git a/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java b/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java index 52ef5aa..c248203 100644 --- a/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java +++ b/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java @@ -1,15 +1,16 @@ package com.billpaymentservice.bbps.config; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestClient; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; - @Configuration public class RestClientConfig { diff --git a/src/main/java/com/billpaymentservice/bbps/controller/AgentController.java b/src/main/java/com/billpaymentservice/bbps/controller/AgentController.java index 2646092..92737af 100644 --- a/src/main/java/com/billpaymentservice/bbps/controller/AgentController.java +++ b/src/main/java/com/billpaymentservice/bbps/controller/AgentController.java @@ -3,7 +3,10 @@ package com.billpaymentservice.bbps.controller; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import com.billpaymentservice.bbps.dto.ResponseModel; import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest; diff --git a/src/main/java/com/billpaymentservice/bbps/controller/PaymentController.java b/src/main/java/com/billpaymentservice/bbps/controller/PaymentController.java index 69170b4..2b091d2 100644 --- a/src/main/java/com/billpaymentservice/bbps/controller/PaymentController.java +++ b/src/main/java/com/billpaymentservice/bbps/controller/PaymentController.java @@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.RestController; import com.billpaymentservice.bbps.dto.ResponseModel; import com.billpaymentservice.bbps.dto.request.BillPaymentRequest; -import com.billpaymentservice.bbps.dto.request.FetchBillRequest; import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest; import com.billpaymentservice.bbps.service.PaymentService; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/AmountOptionDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/AmountOptionDTO.java index a13eb04..29be206 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/AmountOptionDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/AmountOptionDTO.java @@ -1,8 +1,8 @@ package com.billpaymentservice.bbps.dto; -import jakarta.persistence.*; +import java.util.List; + import lombok.Getter; import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/dto/BillerDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/BillerDTO.java index f2c81cd..005b1d2 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/BillerDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/BillerDTO.java @@ -1,7 +1,9 @@ package com.billpaymentservice.bbps.dto; import java.util.List; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; import lombok.Getter; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/BillerResponseParamsDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/BillerResponseParamsDTO.java index 7422a85..e6881b7 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/BillerResponseParamsDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/BillerResponseParamsDTO.java @@ -1,8 +1,9 @@ package com.billpaymentservice.bbps.dto; +import java.util.List; + import lombok.Getter; import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamDTO.java index 84fbc7f..07ce7d1 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamDTO.java @@ -1,11 +1,11 @@ package com.billpaymentservice.bbps.dto; +import java.util.List; + import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; -import java.util.List; - @Getter @Setter public class CustomerParamDTO { diff --git a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java index 4086d95..fd07abd 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/CustomerParamGroupsDTO.java @@ -1,10 +1,10 @@ package com.billpaymentservice.bbps.dto; +import java.util.List; + import lombok.Getter; import lombok.Setter; import lombok.ToString; -import java.util.List; - @Getter @Setter @ToString diff --git a/src/main/java/com/billpaymentservice/bbps/dto/DispositionsDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/DispositionsDTO.java index 4297bd6..6c8a8a9 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/DispositionsDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/DispositionsDTO.java @@ -2,7 +2,6 @@ package com.billpaymentservice.bbps.dto; import lombok.Getter; import lombok.Setter; -import lombok.ToString; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/dto/GroupDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/GroupDTO.java index b475d22..5a80d65 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/GroupDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/GroupDTO.java @@ -1,8 +1,9 @@ package com.billpaymentservice.bbps.dto; +import java.util.List; + import lombok.Getter; import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/dto/PaymentChannelDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/PaymentChannelDTO.java index dd8d5f1..1c6ebd2 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/PaymentChannelDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/PaymentChannelDTO.java @@ -1,6 +1,5 @@ package com.billpaymentservice.bbps.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import lombok.Getter; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/PaymentModeDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/PaymentModeDTO.java index 1f55930..9ffaea5 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/PaymentModeDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/PaymentModeDTO.java @@ -2,7 +2,9 @@ package com.billpaymentservice.bbps.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.PositiveOrZero; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/request/BillPaymentRequest.java b/src/main/java/com/billpaymentservice/bbps/dto/request/BillPaymentRequest.java index ca7b99c..2c395d2 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/request/BillPaymentRequest.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/request/BillPaymentRequest.java @@ -1,5 +1,6 @@ package com.billpaymentservice.bbps.dto.request; import java.util.List; + import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/request/MasterRequest.java b/src/main/java/com/billpaymentservice/bbps/dto/request/MasterRequest.java index 0998e91..bdc7714 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/request/MasterRequest.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/request/MasterRequest.java @@ -1,7 +1,6 @@ package com.billpaymentservice.bbps.dto.request; import lombok.Getter; - import lombok.Setter; @Getter diff --git a/src/main/java/com/billpaymentservice/bbps/dto/response/BillPaymentResponse.java b/src/main/java/com/billpaymentservice/bbps/dto/response/BillPaymentResponse.java index 1654b5f..204b86a 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/response/BillPaymentResponse.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/response/BillPaymentResponse.java @@ -1,6 +1,7 @@ package com.billpaymentservice.bbps.dto.response; import com.billpaymentservice.bbps.dto.GeneralResp; + import lombok.Getter; import lombok.Setter; import lombok.ToString; diff --git a/src/main/java/com/billpaymentservice/bbps/dto/response/BillerDataResponse.java b/src/main/java/com/billpaymentservice/bbps/dto/response/BillerDataResponse.java index 647efc8..d48c12f 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/response/BillerDataResponse.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/response/BillerDataResponse.java @@ -2,7 +2,6 @@ package com.billpaymentservice.bbps.dto.response; import com.billpaymentservice.bbps.dto.BillerDTO; import com.billpaymentservice.bbps.dto.GeneralResp; -import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; 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 99b370b..42c31fd 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/response/CustomParamResp.java @@ -1,10 +1,9 @@ package com.billpaymentservice.bbps.dto.response; import java.util.List; -import com.billpaymentservice.bbps.dto.ContactMaster; + import com.billpaymentservice.bbps.dto.CustomParamDTO; import com.billpaymentservice.bbps.dto.GeneralResp; -import com.billpaymentservice.bbps.entites.CustomerParam; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/AdditionalInfo.java b/src/main/java/com/billpaymentservice/bbps/entites/AdditionalInfo.java index 906ac37..90ed365 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/AdditionalInfo.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/AdditionalInfo.java @@ -1,8 +1,15 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import lombok.ToString; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransfer.java b/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransfer.java index 2424a59..a227085 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransfer.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransfer.java @@ -3,8 +3,6 @@ package com.billpaymentservice.bbps.entites; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransferEntity.java b/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransferEntity.java index f687f91..766def0 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransferEntity.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/AgentFundTransferEntity.java @@ -1,7 +1,12 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/AmountOption.java b/src/main/java/com/billpaymentservice/bbps/entites/AmountOption.java index d1fab78..b766930 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/AmountOption.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/AmountOption.java @@ -1,10 +1,19 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import java.util.List; -import com.fasterxml.jackson.annotation.JsonProperty; @Entity @Table(name = "amount_option") diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java b/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java index 758396c..965351f 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java @@ -1,10 +1,5 @@ package com.billpaymentservice.bbps.entites; -import java.time.LocalDateTime; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.UpdateTimestamp; - import com.billpaymentservice.bbps.audit.Auditable; import jakarta.persistence.Column; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillInitiate.java b/src/main/java/com/billpaymentservice/bbps/entites/BillInitiate.java index c53cbe1..504bbcd 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillInitiate.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillInitiate.java @@ -1,6 +1,11 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; @Data @AllArgsConstructor diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillMaster.java b/src/main/java/com/billpaymentservice/bbps/entites/BillMaster.java index 48d597d..67f70a9 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillMaster.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillMaster.java @@ -1,9 +1,6 @@ package com.billpaymentservice.bbps.entites; -import java.time.LocalDateTime; import java.util.List; -import com.billpaymentservice.bbps.dto.BillerResponseBill; - import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillPayment.java b/src/main/java/com/billpaymentservice/bbps/entites/BillPayment.java index c4ed1cc..9b7fdaf 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillPayment.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillPayment.java @@ -2,7 +2,14 @@ package com.billpaymentservice.bbps.entites; import java.time.LocalDateTime; import java.util.List; -import jakarta.persistence.*; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillerDetails.java b/src/main/java/com/billpaymentservice/bbps/entites/BillerDetails.java index 9e552fb..4b6b871 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillerDetails.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillerDetails.java @@ -1,14 +1,21 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import java.util.List; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillerPlanResponseParams.java b/src/main/java/com/billpaymentservice/bbps/entites/BillerPlanResponseParams.java index 3415f7e..b11ecc3 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillerPlanResponseParams.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillerPlanResponseParams.java @@ -1,15 +1,17 @@ package com.billpaymentservice.bbps.entites; -import java.util.List; - +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; -import lombok.Getter; -import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillerResponse.java b/src/main/java/com/billpaymentservice/bbps/entites/BillerResponse.java index 4a02e35..b2608a3 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillerResponse.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillerResponse.java @@ -1,7 +1,5 @@ package com.billpaymentservice.bbps.entites; -import java.time.LocalDate; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BillerResponseParams.java b/src/main/java/com/billpaymentservice/bbps/entites/BillerResponseParams.java index dafef13..d8b1c9a 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BillerResponseParams.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BillerResponseParams.java @@ -1,11 +1,21 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java index fe3bafe..c76e6fe 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomParam.java @@ -1,6 +1,11 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java index b032baf..574da4a 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParam.java @@ -1,13 +1,24 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; +import java.util.List; + +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import java.util.List; - @Getter @Setter @Entity diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamDAO.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamDAO.java index d9ce0d7..5fc6a25 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamDAO.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamDAO.java @@ -1,7 +1,11 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamGroups.java b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamGroups.java index f422665..12e84ed 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamGroups.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/CustomerParamGroups.java @@ -1,12 +1,22 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import java.util.List; - @Getter @Setter @Entity diff --git a/src/main/java/com/billpaymentservice/bbps/entites/DispositionDetails.java b/src/main/java/com/billpaymentservice/bbps/entites/DispositionDetails.java index c0cdba9..a1e2126 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/DispositionDetails.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/DispositionDetails.java @@ -1,7 +1,9 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; - +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/Group.java b/src/main/java/com/billpaymentservice/bbps/entites/Group.java index 455fe70..34889a4 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/Group.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/Group.java @@ -1,12 +1,24 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import java.util.List; - @Getter @Setter @Entity diff --git a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFee.java b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFee.java index 0343502..337415e 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFee.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFee.java @@ -2,14 +2,20 @@ package com.billpaymentservice.bbps.entites; import java.util.List; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; -import lombok.Getter; -import lombok.Setter; -import java.util.List; @Getter @Setter diff --git a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeConf.java b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeConf.java index 789d8f8..7b9c405 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeConf.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeConf.java @@ -2,16 +2,20 @@ package com.billpaymentservice.bbps.entites; import java.util.List; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; - -import jakarta.persistence.*; -import jakarta.validation.constraints.*; -import lombok.Getter; -import lombok.Setter; -import java.util.List; - @Getter @Setter @Entity diff --git a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeDetail.java b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeDetail.java index 382b2c6..08c9d14 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeDetail.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/InterchangeFeeDetail.java @@ -1,6 +1,13 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/PaymentChannel.java b/src/main/java/com/billpaymentservice/bbps/entites/PaymentChannel.java index 5c12b4e..f799dbd 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/PaymentChannel.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/PaymentChannel.java @@ -1,13 +1,18 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; -import jakarta.validation.constraints.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import com.fasterxml.jackson.annotation.JsonProperty; - @Getter @Setter @Entity diff --git a/src/main/java/com/billpaymentservice/bbps/entites/PaymentMode.java b/src/main/java/com/billpaymentservice/bbps/entites/PaymentMode.java index 0493846..947af6b 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/PaymentMode.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/PaymentMode.java @@ -5,8 +5,6 @@ package com.billpaymentservice.bbps.entites; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/RemitterIdentity.java b/src/main/java/com/billpaymentservice/bbps/entites/RemitterIdentity.java index 66d2e1b..020fa3a 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/RemitterIdentity.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/RemitterIdentity.java @@ -1,6 +1,14 @@ package com.billpaymentservice.bbps.entites; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/billpaymentservice/bbps/exception/GlobalExceptionHandler.java b/src/main/java/com/billpaymentservice/bbps/exception/GlobalExceptionHandler.java index 6007b09..623c185 100644 --- a/src/main/java/com/billpaymentservice/bbps/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/billpaymentservice/bbps/exception/GlobalExceptionHandler.java @@ -1,61 +1,57 @@ package com.billpaymentservice.bbps.exception; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import java.util.*; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.*; +import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.*; import com.billpaymentservice.bbps.dto.ResponseModel; -import java.util.HashMap; -import java.util.Map; - @ControllerAdvice public class GlobalExceptionHandler { - // ✅ Handle CustomException - @ExceptionHandler(CustomException.class) - public ResponseEntity> handleCustomException(CustomException ex) { - return new ResponseEntity<>(ex.getResponseModel(), HttpStatus.BAD_REQUEST); - } + private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); - // ✅ Handle validation errors @ExceptionHandler(MethodArgumentNotValidException.class) - public ResponseEntity> handleValidationExceptions(MethodArgumentNotValidException ex) { + public ResponseEntity> handleValidation(MethodArgumentNotValidException ex) { + List> fieldErrors = ex.getBindingResult().getFieldErrors() + .stream() + .map(fe -> Map.of("field", fe.getField(), "message", fe.getDefaultMessage())) + .collect(Collectors.toList()); - Map errors = new HashMap<>(); - - ex.getBindingResult().getFieldErrors().forEach(error -> { - errors.put(error.getField(), error.getDefaultMessage()); - }); - - ResponseModel response = new ResponseModel<>( - "Validation Failed", - "FAILED", - HttpStatus.BAD_REQUEST.value(), - errors + logger.warn("Validation failed: {}", fieldErrors); + ResponseModel>> resp = new ResponseModel<>( + "Validation failed for request", + "FAILED", + HttpStatus.BAD_REQUEST.value(), + null ); + // put validation errors into data or duplicate field in ResponseModel as required + resp.setData(fieldErrors); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(resp); + } - return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); + @ExceptionHandler(AppException.class) + public ResponseEntity> handleAppException(AppException ex) { + logger.warn("AppException: status={}, message={}", ex.getStatus(), ex.getMessage()); + ResponseModel resp = new ResponseModel<>(ex.getMessage(), ex.getStatus(), ex.getStatusCode(), ex.getData()); + return ResponseEntity.status(HttpStatus.valueOf(ex.getStatusCode())).body(resp); } - // ✅ NEW: Handle ALL other exceptions (Generic Handler) @ExceptionHandler(Exception.class) - public ResponseEntity> 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 + public ResponseEntity> handleAll(Exception ex) { + logger.error("Unhandled exception", ex); 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); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } -} \ No newline at end of file +} diff --git a/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java index 8eb7927..b04b176 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java @@ -1,7 +1,6 @@ package com.billpaymentservice.bbps.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import org.springframework.web.servlet.function.ServerRequest.Headers; import com.billpaymentservice.bbps.entites.BharatConnectMaster; diff --git a/src/main/java/com/billpaymentservice/bbps/repository/BillerDataRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/BillerDataRepository.java index 458a8b1..f4f7b2f 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/BillerDataRepository.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/BillerDataRepository.java @@ -1,14 +1,13 @@ package com.billpaymentservice.bbps.repository; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.billpaymentservice.bbps.entites.BillerDetails; -import java.util.List; -import java.util.Optional; - @Repository public interface BillerDataRepository extends JpaRepository { diff --git a/src/main/java/com/billpaymentservice/bbps/service/MasterDataService.java b/src/main/java/com/billpaymentservice/bbps/service/MasterDataService.java index 1430230..cd608e5 100644 --- a/src/main/java/com/billpaymentservice/bbps/service/MasterDataService.java +++ b/src/main/java/com/billpaymentservice/bbps/service/MasterDataService.java @@ -7,11 +7,8 @@ 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.MasterRequest; -import com.billpaymentservice.bbps.dto.request.MerchantRequestModel; import com.billpaymentservice.bbps.dto.request.PlanRequest; -import jakarta.servlet.http.HttpServletRequest; - public interface MasterDataService { public ResponseModel getBillerByBillerId(BillerDetailRequest billerDetailRequest); diff --git a/src/main/java/com/billpaymentservice/bbps/service/PaymentService.java b/src/main/java/com/billpaymentservice/bbps/service/PaymentService.java index 84596f4..a25f681 100644 --- a/src/main/java/com/billpaymentservice/bbps/service/PaymentService.java +++ b/src/main/java/com/billpaymentservice/bbps/service/PaymentService.java @@ -2,7 +2,6 @@ package com.billpaymentservice.bbps.service; import com.billpaymentservice.bbps.dto.ResponseModel; import com.billpaymentservice.bbps.dto.request.BillPaymentRequest; -import com.billpaymentservice.bbps.dto.request.FetchBillRequest; import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest; public interface PaymentService { diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java index 6c8c2db..4462d83 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AgentServiceImpl.java @@ -1,8 +1,9 @@ package com.billpaymentservice.bbps.serviceImpl; -import java.time.LocalDateTime; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -39,7 +40,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; @Service -@Slf4j public class AgentServiceImpl implements AgentService { @Value("${agent.data.url}") @@ -51,7 +51,7 @@ public class AgentServiceImpl implements AgentService { private final BharatConnectMasterRepository beneficiaryDetailsRepository; private final BillMasterRepository billMasterRepository; private final BillInitateRepository billIntiateRepository; - + private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class); public AgentServiceImpl(RestClient restClient, HttpService httpService, Helper helper, BharatConnectMasterRepository beneficiaryDetailsRepository,InboundTraceLogRepository inboundTraceLogRepository, OutboundTraceLogRepository outboundTraceLogRepository, BillMasterRepository billMasterRepository,BillInitateRepository billIntiateRepository) { @@ -64,13 +64,13 @@ public class AgentServiceImpl implements AgentService { } - @Override public ResponseModel initiateBillFetch(FetchBillRequest fetchBillRequest) { + LOGGER.info("Initiating bill fetch for request ID: {} and MID", fetchBillRequest.getReqId(), fetchBillRequest.getMid()); String apiName = "InitiateBillFetch"; String txnId = helper.generateTxnId(15); String requestId = fetchBillRequest.getReqId(); - String url = agentDtaUrl + BBPSConstant.BILL_FETCH_INTI; + String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_INTI; helper.validateMerchant(fetchBillRequest.getMid()); @@ -87,71 +87,74 @@ public class AgentServiceImpl implements AgentService { // ✅ Create inbound & outbound logs InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, fetchBillRequest.getMid(), "POST", requestJson); - OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "POST", requestJson); + OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, fullUrl, "POST", requestJson); + LOGGER.debug("Outbound log created successfully for txnId: {} and reqId: {}", txnId, requestId); try { - Map responseMap = httpService.postRequest(url, requestJson, headers); + LOGGER.info("Calling external API: {}", fullUrl); + Map responseMap = httpService.postRequest(fullUrl, requestJson, headers); String responseData = responseMap.get("data"); - log.info("📦 Bill Fetch API Response: {}", responseData); helper.updateOutboundLogResponse(outboundLog, responseData); + LOGGER.debug("Response received from BBPS: {}", responseData); Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); if (!dataMap.containsKey("genericResponse")) { - helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); - 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")) - ); + helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); + LOGGER.warn("Invalid response received for txnId: {}", txnId); + 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")) + ); } - + BillMaster billMaster = new BillMaster(); billMaster.setBillId((String) dataMap.get("billId")); billMaster.setReqId(fetchBillRequest.getReqId()); billMaster.setTxnId(txnId); billMasterRepository.save(billMaster); + LOGGER.info("BillMaster saved for billId: {}", billMaster.getBillId()); + FetchBillResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillResponse.class); GeneralResp generalResponse = fetchBillResponse.getGenericResponse(); helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus()); - //save intitate bill here + BillInitiate billInitiate = new BillInitiate(); billInitiate.setBillId((String) dataMap.get("billId")); billInitiate.setReqId(fetchBillRequest.getReqId()); billInitiate.setTxnId(txnId); billIntiateRepository.save(billInitiate); - - + LOGGER.info("BillInitiate entry saved for billId: {}", billInitiate.getBillId()); + BillFetchByBillIdRequest billFetchByBillIdRequest = new BillFetchByBillIdRequest(); billFetchByBillIdRequest.setBillId(fetchBillResponse.getBillId()); billFetchByBillIdRequest.setMid(fetchBillRequest.getMid()); billFetchByBillIdRequest.setReqId(requestId); - + LOGGER.info("Waiting for 2 seconds before fetching bill by ID..."); try { Thread.sleep(2000); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); // restore interrupted flag - log.warn("Thread interrupted during delay: {}", e.getMessage()); + Thread.currentThread().interrupt(); + LOGGER.warn("Thread interrupted during delay: {}", e.getMessage()); } - + LOGGER.info("Calling internal method Fetching bill by ID: {}", billFetchByBillIdRequest.getBillId()); return fetchBillById(billFetchByBillIdRequest, inboundLog); } catch (JsonProcessingException e) { - log.error("❌ JSON Parsing Error: {}", e.getMessage()); + LOGGER.error("JSON Parsing Error: {}", e.getMessage(), e); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); - } + } } - - - public ResponseModel fetchBillById(BillFetchByBillIdRequest billFetchByBillIdRequest, InboundTraceLog inboundLog) { + LOGGER.info("Fetching bill by BILLID for request ID={} and MID={}", billFetchByBillIdRequest.getReqId(), billFetchByBillIdRequest.getMid()); String apiName = "FetchBillById"; String txnId = helper.generateTxnId(15); String reqId = billFetchByBillIdRequest.getReqId(); String billId = billFetchByBillIdRequest.getBillId(); - String url = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + "1ced7566-1add-4e01-9ed6-04cd67ac9684"; + String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + "1ced7566-1add-4e01-9ed6-04cd67ac9684"; helper.validateMerchant(billFetchByBillIdRequest.getMid()); @@ -163,239 +166,252 @@ public class AgentServiceImpl implements AgentService { headers.setContentType(MediaType.APPLICATION_JSON); ObjectMapper objectMapper = new ObjectMapper(); - OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, url, "GET", null); + OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null); + LOGGER.debug("Outbound log created successfully for FetchBillById: {}", fullUrl); - - try { - Map responseMap = httpService.getRequest(url, headers); - String responseData = responseMap.get("data"); - log.info("📦 Bill FetchById Response: {}", responseData); + try { + LOGGER.info("Calling external API: {}", fullUrl); + Map responseMap = httpService.getRequest(fullUrl, headers); + String responseData = responseMap.get("data"); + LOGGER.info("Bill FetchById Response: {}", responseData); - helper.updateOutboundLogResponse(outboundLog, responseData); + helper.updateOutboundLogResponse(outboundLog, responseData); - Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); + Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); - if (!dataMap.containsKey("genericResponse")) { - helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); - 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")) - ); - } - - BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class); - GeneralResp generalResp = responseWrapper.getGenericResponse(); - - String status = generalResp.getStatus(); - log.info("📡 Current Bill Status: {}", status); - // ✅ Check for "INPROGRESS" or pending state - - - // ✅ Final successful response - helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); - helper.saveOrUpdateBillerData(responseWrapper,billFetchByBillIdRequest); - - return new ResponseModel( - generalResp.getMessage(), - generalResp.getStatus(), - Integer.parseInt(generalResp.getStatusCode()), - responseWrapper + if (!dataMap.containsKey("genericResponse")) { + helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); + LOGGER.warn("Invalid response structure for txnId: {}", txnId); + 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")) ); - } catch (JsonProcessingException e) { - log.error("Error parsing BillById JSON: {}", e.getMessage()); - helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); - throw new CustomException("Invalid JSON received from API"); - } + } + + BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class); + GeneralResp generalResp = responseWrapper.getGenericResponse(); + + String status = generalResp.getStatus(); + LOGGER.info("Current Bill Status: {}", status); + + helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); + helper.saveOrUpdateBillerData(responseWrapper,billFetchByBillIdRequest); + LOGGER.info("Bill data saved successfully for billId: {}", billId); + + return new ResponseModel( + generalResp.getMessage(), + generalResp.getStatus(), + Integer.parseInt(generalResp.getStatusCode()), + responseWrapper + ); + } catch (JsonProcessingException e) { + LOGGER.error("Error parsing BillById JSON: {}", e.getMessage(), e); + helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); + throw new CustomException("Invalid JSON received from API"); } + } @Override public ResponseModel fetchBillById(BillFetchByBillIdRequest billFetchByBillIdRequest) { - String apiName = "FetchBillById"; - String txnId = helper.generateTxnId(15); - String reqId = billFetchByBillIdRequest.getReqId(); - String billId = billFetchByBillIdRequest.getBillId(); - String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + "1ced7566-1add-4e01-9ed6-04cd67ac9684"; + String apiName = "FetchBillById"; + String txnId = helper.generateTxnId(15); + String reqId = billFetchByBillIdRequest.getReqId(); + String billId = billFetchByBillIdRequest.getBillId(); + String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + "1ced7566-1add-4e01-9ed6-04cd67ac9684"; - try { - helper.validateMerchant(billFetchByBillIdRequest.getMid()); - BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); - HttpHeaders headers = new HttpHeaders(); - headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); - headers.set("agentId", headersData.getAgentId()); - headers.set("tenantId", headersData.getTenantId()); - headers.setContentType(MediaType.APPLICATION_JSON); - Map responseMap = httpService.getRequest(fullUrl, headers); - String responseData = responseMap.get("data"); - log.info("data is :{}", responseData); - ObjectMapper objectMapper = new ObjectMapper(); - Map dataMap = objectMapper.readValue(responseData, - new TypeReference>() { - }); - if (!dataMap.containsKey("genericResponse")) { - throw new CustomException(String.valueOf(dataMap.get("message")), // message - String.valueOf(dataMap.get("status")), // status - Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode (int) - String.valueOf(dataMap.get("remarks"))); - } - BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class); - GeneralResp generalResp = responseWrapper.getGenericResponse(); - ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), - Integer.parseInt(generalResp.getStatusCode()), responseWrapper); - - helper.saveOrUpdateBillerData(responseWrapper,billFetchByBillIdRequest); - - return responseModel; + LOGGER.info("Initiating {} API for billId={} and reqId={}", apiName, billId, reqId); - } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); - throw new CustomException("Invalid JSON received from API"); - } - - } - - - @Override - public ResponseModel initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) { - - ResponseModel responseModel = new ResponseModel(); try { - - helper.validateMerchant(fetchBillValidateRequest.getMid()); + helper.validateMerchant(billFetchByBillIdRequest.getMid()); + LOGGER.debug("Merchant validated successfully for MID={}", billFetchByBillIdRequest.getMid()); BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); - - if (headersData == null) { - responseModel = new ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST, headersData); - return responseModel; - } - HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); headers.set("agentId", headersData.getAgentId()); headers.set("tenantId", headersData.getTenantId()); headers.setContentType(MediaType.APPLICATION_JSON); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = objectMapper.writeValueAsString(fetchBillValidateRequest); - String url = agentDtaUrl + BBPSConstant.BILLER_VALIDATE_URL; - - Map responseMap = httpService.postRequest(url, json, headers); + LOGGER.info("Calling external BBPS API for FetchBillById, URL={}", fullUrl); + Map responseMap = httpService.getRequest(fullUrl, headers); String responseData = responseMap.get("data"); + LOGGER.info("Response received from BBPS for billId={} : {}", billId, responseData); - log.info("📦 Bill Fetch API Response: {}", responseData); + ObjectMapper objectMapper = new ObjectMapper(); + Map dataMap = objectMapper.readValue(responseData, + new TypeReference>() {}); - if (responseData == null || responseData.isEmpty()) { - throw new CustomException("Empty response from BBPS server"); - } - - // ✅ Convert JSON string → Map - Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); - - // ✅ Validate generalResp if (!dataMap.containsKey("genericResponse")) { - throw new CustomException("Invalid response structure from BBPS"); + LOGGER.warn("Invalid response structure received for billId={} | Response={}", billId, responseData); + throw new CustomException( + String.valueOf(dataMap.get("message")), // message + String.valueOf(dataMap.get("status")), // status + Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode + String.valueOf(dataMap.get("remarks")) + ); } - // ✅ Convert to your custom DTO - FetchBillValidatestResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillValidatestResponse.class); - GeneralResp generalResponse = fetchBillResponse.getGenericResponse(); - - // ✅ Build final ResponseModel - responseModel = new ResponseModel( - generalResponse.getMessage(), - generalResponse.getStatus(), - Integer.parseInt(generalResponse.getStatusCode()), - fetchBillResponse + BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class); + GeneralResp generalResp = responseWrapper.getGenericResponse(); + ResponseModel responseModel = new ResponseModel( + generalResp.getMessage(), + generalResp.getStatus(), + Integer.parseInt(generalResp.getStatusCode()), + responseWrapper ); - } catch (CustomException ex) { - log.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception - } catch (Exception e) { - log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e); - responseModel.setStatus("500"); - responseModel.setMessage("Exception occurred"); - responseModel.setData(e.getMessage()); - } + helper.saveOrUpdateBillerData(responseWrapper, billFetchByBillIdRequest); + LOGGER.info("Bill data saved successfully for billId={} | Status={}", billId, generalResp.getStatus()); - return responseModel; + return responseModel; + + } catch (JsonProcessingException e) { + LOGGER.error("Error parsing responseData JSON for billId={} : {}", billId, e.getMessage(), e); + throw new CustomException("Invalid JSON received from API"); + } } + + @Override + public ResponseModel initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) { + // TODO Auto-generated method stub + return null; + } + + @Override public ResponseModel initiateBillValidateByBillId(BillFetchByBillIdRequest billRequest) { - - ResponseModel responseModel = new ResponseModel(); - try { - helper.validateMerchant(billRequest.getMid()); - - BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); - - if (headersData == null) { - responseModel = new ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST, headersData); - return responseModel; - } - - HttpHeaders headers = new HttpHeaders(); - headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); - headers.set("agentId", headersData.getAgentId()); - headers.set("tenantId", headersData.getTenantId()); - headers.setContentType(MediaType.APPLICATION_JSON); - - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = objectMapper.writeValueAsString(billRequest); - String url = agentDtaUrl + BBPSConstant.BILL_ID_URL + billRequest.getBillId(); - - log.info("Full URL: {}", url); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - - // ✅ Call the API using httpService - Map responseMap = httpService.getRequest(url, headers); - String responseData = responseMap.get("data"); - - log.info("📦 Bill Fetch API Response: {}", responseData); - - if (responseData == null || responseData.isEmpty()) { - throw new CustomException("Empty response from BBPS server"); - } - - // ✅ Convert JSON string → Map - Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); - - // ✅ Validate generalResp - if (!dataMap.containsKey("genericResponse")) { - throw new CustomException("Invalid response structure from BBPS"); - } - - // ✅ Convert to your custom DTO - BillDataResponse fetchBillResponse = objectMapper.convertValue(dataMap, BillDataResponse.class); - GeneralResp generalResponse = fetchBillResponse.getGenericResponse(); - - // ✅ Build final ResponseModel - responseModel = new ResponseModel( - generalResponse.getRemarks(), - generalResponse.getStatus(), - Integer.parseInt(generalResponse.getStatusCode()), - fetchBillResponse - ); - - } catch (CustomException ex) { - log.warn("Merchant validation failed: {}", ex.getMessage()); - return ex.getResponseModel(); // Directly return ResponseModel from exception - } catch (Exception e) { - log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e); - responseModel.setStatus("500"); - responseModel.setMessage("Exception occurred"); - responseModel.setData(e.getMessage()); - } - - return responseModel; + // TODO Auto-generated method stub + return null; } + + + + /* + * @Override public ResponseModel + * initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) { + * + * ResponseModel responseModel = new ResponseModel(); try { + * + * helper.validateMerchant(fetchBillValidateRequest.getMid()); + * + * BharatConnectMaster headersData = + * beneficiaryDetailsRepository.findByOrgId("ORG001"); + * + * if (headersData == null) { responseModel = new + * ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST, + * headersData); return responseModel; } + * + * HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key", + * headersData.getXDigiledgeKey()); headers.set("agentId", + * headersData.getAgentId()); headers.set("tenantId", + * headersData.getTenantId()); + * headers.setContentType(MediaType.APPLICATION_JSON); + * + * ObjectMapper objectMapper = new ObjectMapper(); + * objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); String + * json = objectMapper.writeValueAsString(fetchBillValidateRequest); String url + * = agentDtaUrl + BBPSConstant.BILLER_VALIDATE_URL; + * + * Map responseMap = httpService.postRequest(url, json, + * headers); String responseData = responseMap.get("data"); + * + * log.info("📦 Bill Fetch API Response: {}", responseData); + * + * if (responseData == null || responseData.isEmpty()) { throw new + * CustomException("Empty response from BBPS server"); } + * + * // ✅ Convert JSON string → Map Map dataMap = + * objectMapper.readValue(responseData, new TypeReference>() + * {}); + * + * // ✅ Validate generalResp if (!dataMap.containsKey("genericResponse")) { + * throw new CustomException("Invalid response structure from BBPS"); } + * + * // ✅ Convert to your custom DTO FetchBillValidatestResponse fetchBillResponse + * = objectMapper.convertValue(dataMap, FetchBillValidatestResponse.class); + * GeneralResp generalResponse = fetchBillResponse.getGenericResponse(); + * + * // ✅ Build final ResponseModel responseModel = new ResponseModel( + * generalResponse.getMessage(), generalResponse.getStatus(), + * Integer.parseInt(generalResponse.getStatusCode()), fetchBillResponse ); + * + * } catch (CustomException ex) { log.warn("Merchant validation failed: {}", + * ex.getMessage()); return ex.getResponseModel(); // Directly return + * ResponseModel from exception } catch (Exception e) { + * log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e); + * responseModel.setStatus("500"); + * responseModel.setMessage("Exception occurred"); + * responseModel.setData(e.getMessage()); } + * + * return responseModel; } + * + * @Override public ResponseModel + * initiateBillValidateByBillId(BillFetchByBillIdRequest billRequest) { + * + * ResponseModel responseModel = new ResponseModel(); try { + * helper.validateMerchant(billRequest.getMid()); + * + * BharatConnectMaster headersData = + * beneficiaryDetailsRepository.findByOrgId("ORG001"); + * + * if (headersData == null) { responseModel = new + * ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST, + * headersData); return responseModel; } + * + * HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key", + * headersData.getXDigiledgeKey()); headers.set("agentId", + * headersData.getAgentId()); headers.set("tenantId", + * headersData.getTenantId()); + * headers.setContentType(MediaType.APPLICATION_JSON); + * + * ObjectMapper objectMapper = new ObjectMapper(); + * objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); String + * json = objectMapper.writeValueAsString(billRequest); String url = agentDtaUrl + * + BBPSConstant.BILL_ID_URL + billRequest.getBillId(); + * + * log.info("Full URL: {}", url); + * objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + * + * // ✅ Call the API using httpService Map responseMap = + * httpService.getRequest(url, headers); String responseData = + * responseMap.get("data"); + * + * log.info("📦 Bill Fetch API Response: {}", responseData); + * + * if (responseData == null || responseData.isEmpty()) { throw new + * CustomException("Empty response from BBPS server"); } + * + * // ✅ Convert JSON string → Map Map dataMap = + * objectMapper.readValue(responseData, new TypeReference>() + * {}); + * + * // ✅ Validate generalResp if (!dataMap.containsKey("genericResponse")) { + * throw new CustomException("Invalid response structure from BBPS"); } + * + * // ✅ Convert to your custom DTO BillDataResponse fetchBillResponse = + * objectMapper.convertValue(dataMap, BillDataResponse.class); GeneralResp + * generalResponse = fetchBillResponse.getGenericResponse(); + * + * // ✅ Build final ResponseModel responseModel = new ResponseModel( + * generalResponse.getRemarks(), generalResponse.getStatus(), + * Integer.parseInt(generalResponse.getStatusCode()), fetchBillResponse ); + * + * } catch (CustomException ex) { log.warn("Merchant validation failed: {}", + * ex.getMessage()); return ex.getResponseModel(); // Directly return + * ResponseModel from exception } catch (Exception e) { + * log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e); + * responseModel.setStatus("500"); + * responseModel.setMessage("Exception occurred"); + * responseModel.setData(e.getMessage()); } + * + * return responseModel; } + */ + /* POLLING METHOD * public ResponseModel fetchBillById(BillFetchByBillIdRequest diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/HttpService.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/HttpService.java index 1afd2bf..0874403 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/HttpService.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/HttpService.java @@ -8,13 +8,11 @@ import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.client.JdkClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestClient; -import com.billpaymentservice.bbps.dto.request.FetchBillRequest; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java index 773b931..97ac26d 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java @@ -1,11 +1,10 @@ // java package com.billpaymentservice.bbps.serviceImpl; -import java.time.LocalDateTime; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.stream.Collectors; + import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import org.slf4j.Logger; @@ -69,7 +68,6 @@ public class MasterDataServiceImpl implements MasterDataService { private final DispositionRepository dispositionRepository; private final Helper helper; private final BillerDataRepository billerDataRespository; - private static final Logger log = LoggerFactory.getLogger(MasterDataServiceImpl.class); private final HttpService httpService; private final ObjectMapper objectMapper = new ObjectMapper(); private final InboundTraceLogRepository inboundTraceLogRepository; @@ -97,40 +95,26 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel getMasterData(MasterRequest masterRequest) { - LOGGER.info("Request DTO: {}", masterRequest); - + LOGGER.info("Fetching Master Data for ReqId={} and MID={}", masterRequest.getReqId(), masterRequest.getMid()); String txnID = helper.generateTxnId(15); String apiName = "GetMasterData"; String requestId = masterRequest.getReqId(); String requestJson = helper.convertObjectToJson(masterRequest); - - InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, masterRequest.getMid(), "POST", requestJson); - try { // Merchant Validation helper.validateMerchant(masterRequest.getMid()); - -// if (!"Valid".equalsIgnoreCase(validateMerchant)) { -// LOGGER.warn("Merchant validation failed: {}", validateMerchant); -// return new ResponseModel("Merchant validation failed", validateMerchant, BBPSConstant.BADREQUEST, null); -// } - // check Tender Id is present DB BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); - log.info("Response -: " + headersData); if (headersData == null) { - helper.updateInboundLogFailure(inboundLog, "Tenant Id Is Null", "NOT_FOUND"); - return new ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST, headersData); + LOGGER.warn("header data not found for the orgID"); + throw new CustomException("Something went wrong", "FAILED", 500, ""); } - // get full url String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL + headersData.getTenantId(); LOGGER.info("Calling external API: {}", fullUrl); - OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); LOGGER.info("Response Data: {}", responseData); @@ -158,7 +142,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -166,7 +150,8 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel getBillerByBillerId(BillerDetailRequest billerDetailRequest) { - LOGGER.info("Fetching biller data for billerId={}", billerDetailRequest.getBillerId()); + LOGGER.info("Fetching Biller Detail By Biller Id for ReqId={} and MID={}", billerDetailRequest.getReqId(), billerDetailRequest.getMid()); + helper.validateMerchant(billerDetailRequest.getMid()); String txnID = helper.generateTxnId(15); String apiName = "GetBillerByBillerId"; @@ -178,10 +163,10 @@ public class MasterDataServiceImpl implements MasterDataService { requestJson); OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling external API: {}", fullUrl); Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); - log.info("fetched data from api is :{}", responseData); + LOGGER.info("fetched data from api is :{}", responseData); helper.updateOutboundLogResponse(outboundLog, responseData); try { Map dataMap = objectMapper.readValue(responseData, @@ -205,7 +190,7 @@ public class MasterDataServiceImpl implements MasterDataService { helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -214,7 +199,7 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel getCustomerParamByBillerId(CustomParamRequest customerParamRequest) { - LOGGER.info("Fetching CustomerParam for billerId={}", customerParamRequest.getBillerId()); + LOGGER.info("Fetching Customer Param By Biller Id for ReqId={} and MID={}", customerParamRequest.getReqId(), customerParamRequest.getMid()); String txnID = helper.generateTxnId(15); String apiName = "GetCustomerParamByBillerId"; @@ -229,10 +214,10 @@ public class MasterDataServiceImpl implements MasterDataService { String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMPARAM_URL + billerId; OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling external API: {}", fullUrl); Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); - log.info("data is :{}", responseData); + LOGGER.info("data is :{}", responseData); helper.updateOutboundLogResponse(outboundLog, responseData); @@ -249,8 +234,6 @@ public class MasterDataServiceImpl implements MasterDataService { CustomParamResp responseWrapper = objectMapper.convertValue(dataMap, CustomParamResp.class); List customParams = responseWrapper.getCustomParamResp(); - - GeneralResp generalResp = responseWrapper.getGeneralResp(); List customParam = responseWrapper.getCustomParamResp(); ModelMapper mapper = new ModelMapper(); @@ -260,21 +243,16 @@ public class MasterDataServiceImpl implements MasterDataService { 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; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -288,7 +266,7 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel fetchMasterDataCategoryWise(MasterCategoryRequest masterRequest) { - LOGGER.info("Fetching Master Data Category-wise " + masterRequest); + LOGGER.info("Fetching Master Data Category-wise for ReqId={} and MID={}", masterRequest.getReqId(), masterRequest.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchMasterDataCategoryWise"; String requestId = masterRequest.getReqId(); @@ -332,7 +310,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -340,6 +318,8 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel getDispositionDetails(DispositionRequest dispositionDetailRequest) { + LOGGER.info("Fetching Disposition Details for ReqId={} and MID={}", dispositionDetailRequest.getReqId(), dispositionDetailRequest.getMid()); + String txnID = helper.generateTxnId(15); String apiName = "GetDispositionDetails"; String requestId = dispositionDetailRequest.getReqId(); @@ -351,6 +331,7 @@ public class MasterDataServiceImpl implements MasterDataService { String fullUrl = masterRegisterUrl + BBPSConstant.DISPOSTION_URL; OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); + LOGGER.info("Calling external API: {}", fullUrl); Map responseMap = httpService.getRequest(fullUrl); String responseData = responseMap.get("data"); @@ -393,7 +374,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -401,8 +382,7 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel fetchCustomerParamGroup(BillerDetailRequest requestModel) { - LOGGER.info("Fetching Master Data Category-wise for MID={}", requestModel.getMid()); - + LOGGER.info("Fetching Customer Param Group for ReqId={} and MID={}", requestModel.getReqId(), requestModel.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchCustomerParamGroup"; String requestId = requestModel.getReqId(); @@ -414,7 +394,7 @@ public class MasterDataServiceImpl implements MasterDataService { String fullUrl = masterRegisterUrl + BBPSConstant.CUSTOMER_PARAM_GROUP + requestModel.getBillerId(); OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling external API: {}", fullUrl); Map apiResponse = httpService.getRequest(fullUrl); String responseData = apiResponse.get("data").toString(); helper.updateOutboundLogResponse(outboundLog, responseData); @@ -443,7 +423,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -452,8 +432,8 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel fetchAllMasterAmountOption(BillerDetailRequest requestModel) { - LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid()); + LOGGER.info("Fetching Master Data Amount List for ReqId={} and MID={}", requestModel.getReqId(), requestModel.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchAllMasterAmountOption"; String requestId = requestModel.getReqId(); @@ -465,9 +445,9 @@ public class MasterDataServiceImpl implements MasterDataService { String fullUrl = masterRegisterUrl + BBPSConstant.AMOUNT_OPTIONS + requestModel.getBillerId(); OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling external API: {}", fullUrl); Map apiResponse = httpService.getRequest(fullUrl); - log.info("Response" + apiResponse); + LOGGER.info("Response" + apiResponse); String responseData = apiResponse.get("data").toString(); helper.updateOutboundLogResponse(outboundLog, responseData); @@ -495,7 +475,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -504,8 +484,7 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel fetchPlanCategorie(BillerDetailRequest requestModel) { - LOGGER.info("Fetching Master Data Amount List for MID={}", requestModel.getMid()); - + LOGGER.info("Fetching Plan Categories for ReqId={} and MID={}", requestModel.getReqId(), requestModel.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchPlanCategorie"; String requestId = requestModel.getReqId(); @@ -517,9 +496,9 @@ public class MasterDataServiceImpl implements MasterDataService { String fullUrl = masterRegisterUrl + BBPSConstant.PLAN_CATEGORIES + requestModel.getBillerId(); OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling external API: {}", fullUrl); Map apiResponse = httpService.getRequest(fullUrl); - log.info("Response" + apiResponse); + LOGGER.info("Response" + apiResponse); String responseData = apiResponse.get("data").toString(); helper.updateOutboundLogResponse(outboundLog, responseData); @@ -547,7 +526,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } @@ -555,8 +534,7 @@ public class MasterDataServiceImpl implements MasterDataService { @Override public ResponseModel fetchInitiatingChannel(BillerDetailRequest requestModel) { - LOGGER.info("Fetching Initiating Channel List for MID={}", requestModel.getMid()); - + LOGGER.info("Fetching Initiating Channel for ReqId={} and MID={}", requestModel.getReqId(), requestModel.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchInitiatingChannel"; String requestId = requestModel.getReqId(); @@ -567,12 +545,12 @@ public class MasterDataServiceImpl implements MasterDataService { helper.validateMerchant(requestModel.getMid()); String fullUrl = masterRegisterUrl + BBPSConstant.INITIATING_CHANNEL; - LOGGER.info("Calling Master API: {}", fullUrl); + OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null); - + LOGGER.info("Calling Master API: {}", fullUrl); Map apiResponse = httpService.getRequest(fullUrl); - log.info("Response" + apiResponse); + LOGGER.info("Response" + apiResponse); String responseData = apiResponse.get("data").toString(); helper.updateOutboundLogResponse(outboundLog, responseData); @@ -600,15 +578,15 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } } public ResponseModel fetchPlanByCategories(PlanRequest requestModel) { - LOGGER.info("Fetching Initiating Fetch Plan Category By Biller Id for MID={}", requestModel.getMid()); + LOGGER.info("Fetching Plan By Categories for ReqId={} and MID={}", requestModel.getReqId(), requestModel.getMid()); String txnID = helper.generateTxnId(15); String apiName = "FetchPlanByCategories"; String requestId = requestModel.getReqId(); @@ -636,7 +614,7 @@ public class MasterDataServiceImpl implements MasterDataService { try { Map apiResponse = httpService.getRequest(url); String responseData = apiResponse.get("data"); - log.info("Response Data: {}", responseData); + LOGGER.info("Response Data: {}", responseData); // Update outbound log with response helper.updateOutboundLogResponse(outboundLog, responseData); @@ -669,7 +647,7 @@ public class MasterDataServiceImpl implements MasterDataService { return responseModel; } catch (JsonProcessingException e) { - log.error("Error parsing responseData JSON: {}", e.getMessage()); + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/PaymentServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/PaymentServiceImpl.java index 4f5d68d..7275ad9 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/PaymentServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/PaymentServiceImpl.java @@ -1,6 +1,5 @@ package com.billpaymentservice.bbps.serviceImpl; -import java.time.LocalDateTime; import java.util.Map; import org.modelmapper.ModelMapper; @@ -11,20 +10,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; - import com.billpaymentservice.bbps.dto.GeneralResp; import com.billpaymentservice.bbps.dto.ResponseModel; -import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest; import com.billpaymentservice.bbps.dto.request.BillPaymentRequest; -import com.billpaymentservice.bbps.dto.request.FetchBillRequest; import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest; -import com.billpaymentservice.bbps.dto.response.BillDataResponse; import com.billpaymentservice.bbps.dto.response.BillPaymentResponse; -import com.billpaymentservice.bbps.dto.response.FetchBillResponse; import com.billpaymentservice.bbps.dto.response.TransactionStatusResponse; import com.billpaymentservice.bbps.entites.AgentFundTransfer; import com.billpaymentservice.bbps.entites.BharatConnectMaster; -import com.billpaymentservice.bbps.entites.BillInitiate; import com.billpaymentservice.bbps.entites.BillPayment; import com.billpaymentservice.bbps.entites.InboundTraceLog; import com.billpaymentservice.bbps.entites.OutboundTraceLog; @@ -52,6 +45,7 @@ public class PaymentServiceImpl implements PaymentService { @Value("${payment.data.url}") private String paymentUrl; + private final BharatConnectMasterRepository beneficiaryDetailsRepository; private final HttpService httpService; private final Helper helper; @@ -59,12 +53,14 @@ public class PaymentServiceImpl implements PaymentService { private final InboundTraceLogRepository inboundTraceLogRepository; private final OutboundTraceLogRepository outboundTraceLogRepository; private final PaymentIntiateRepository paymentIntiateRepository; - private final TransactionMasterRepository transactionMasterRepository; - private final AgentFundTransferRepository agentFundTransferRepository; + private final TransactionMasterRepository transactionMasterRepository; + private final AgentFundTransferRepository agentFundTransferRepository; + + private static final Logger LOGGER = LoggerFactory.getLogger(PaymentServiceImpl.class); + public PaymentServiceImpl(BharatConnectMasterRepository beneficiaryDetailsRepository, HttpService httpService, Helper helper, PaymentRepository paymentRepository, InboundTraceLogRepository inboundTraceLogRepository, - OutboundTraceLogRepository outboundTraceLogRepository, - PaymentIntiateRepository paymentIntiateRepository, + OutboundTraceLogRepository outboundTraceLogRepository, PaymentIntiateRepository paymentIntiateRepository, TransactionMasterRepository transactionMasterRepository, AgentFundTransferRepository agentFundTransferRepository) { this.beneficiaryDetailsRepository = beneficiaryDetailsRepository; @@ -78,7 +74,6 @@ public class PaymentServiceImpl implements PaymentService { this.agentFundTransferRepository = agentFundTransferRepository; } - private static final Logger LOGGER = LoggerFactory.getLogger(MasterDataServiceImpl.class); @Override public ResponseModel initiatePayment(BillPaymentRequest billPaymentRequest) { String apiName = "InitiatePayment"; @@ -86,6 +81,8 @@ public class PaymentServiceImpl implements PaymentService { String requestId = billPaymentRequest.getReqId(); String url = paymentUrl + BBPSConstant.PAYMENT_URL; + LOGGER.info("Initiating payment for reqId={} and txnId={}", requestId, txnId); + BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); @@ -98,25 +95,27 @@ public class PaymentServiceImpl implements PaymentService { String requestJson = helper.convertObjectToJson(billPaymentRequest); - // ✅ Create inbound & outbound logs InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, billPaymentRequest.getMid(), "POST", requestJson); OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "POST", requestJson); try { + LOGGER.info("Calling BBPS payment URL: {}", url); Map responseMap = httpService.postRequest(url, requestJson, headers); String responseData = responseMap.get("data"); + LOGGER.info("Payment API Response: {}", responseData); - LOGGER.info("📦 Payment API Response: {}", responseData); helper.updateOutboundLogResponse(outboundLog, responseData); if (responseData == null || responseData.isEmpty()) { helper.updateInboundLogFailure(inboundLog, "Empty response from BBPS", "FAILED"); + LOGGER.warn("Empty response received from BBPS for txnId={}", txnId); throw new CustomException("Empty response from BBPS server"); } Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); if (!dataMap.containsKey("genericResponse")) { helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_STRUCTURE"); + LOGGER.warn("Invalid response structure received for txnId={}", txnId); throw new CustomException("Invalid response structure from BBPS"); } @@ -127,43 +126,44 @@ public class PaymentServiceImpl implements PaymentService { mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); BillPayment entity = mapper.map(billPaymentResponse, BillPayment.class); paymentRepository.save(entity); + LOGGER.info("BillPayment entity saved successfully for txnId={}", txnId); helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus()); PaymentInitiate paymentInitiate = new PaymentInitiate(); paymentInitiate.setTxnId(txnId); paymentInitiate.setReqId(requestId); paymentInitiate.setBankTxnId(billPaymentResponse.getTxnId()); - paymentInitiate.setStatus(billPaymentResponse.getStatus()); + paymentInitiate.setStatus(billPaymentResponse.getStatus()); paymentIntiateRepository.save(paymentInitiate); - // ✅ Trigger transaction status check + LOGGER.info("PaymentInitiate entry saved successfully for txnId={}", txnId); + TransactionStatusRequest transactionStatusRequest = new TransactionStatusRequest(); - transactionStatusRequest.setTxnId(billPaymentResponse.getTxnId()); + transactionStatusRequest.setTxnId(billPaymentResponse.getTxnId()); transactionStatusRequest.setReqId(requestId); - - try { - Thread.sleep(2000); // Initial wait before first status check - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - LOGGER.error("Thread interrupted: {}", e.getMessage()); - } - - //calling the method to check transaction status + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + LOGGER.warn("Thread interrupted during payment delay: {}", e.getMessage()); + } + LOGGER.info("Checking transaction status for txnId={}", billPaymentResponse.getTxnId()); return checkTrasactionStatus(transactionStatusRequest, inboundLog); } catch (JsonProcessingException e) { - LOGGER.error("❌ JSON Parsing Error: {}", e.getMessage()); + LOGGER.error("JSON Parsing Error in initiatePayment: {}", e.getMessage(), e); helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); throw new CustomException("Invalid JSON received from API"); } - } - - public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest,InboundTraceLog inboundLog) { + + public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest, InboundTraceLog inboundLog) { String apiName = "CheckTransactionStatus"; - String txnId = helper.generateTxnId(15); //our genrated txnId + String txnId = helper.generateTxnId(15); String requestId = transactionStatusRequest.getReqId(); - String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId(); ; + String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId(); + + LOGGER.info("Checking transaction status (internal) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId); BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); HttpHeaders headers = new HttpHeaders(); @@ -171,68 +171,66 @@ public class PaymentServiceImpl implements PaymentService { headers.set("agentId", headersData.getAgentId()); headers.set("tenantId", headersData.getTenantId()); headers.setContentType(MediaType.APPLICATION_JSON); - ObjectMapper objectMapper = new ObjectMapper(); + ObjectMapper objectMapper = new ObjectMapper(); OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "GET", null); - Map responseMap = httpService.getRequest(url, headers); - String responseData = responseMap.get("data"); - LOGGER.info("Transaction status response: {}", responseData); + Map responseMap = httpService.getRequest(url, headers); + String responseData = responseMap.get("data"); + LOGGER.info("Transaction status response: {}", responseData); - helper.updateOutboundLogResponse(outboundLog, responseData); + helper.updateOutboundLogResponse(outboundLog, responseData); - try { - Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); - - if (!dataMap.containsKey("generalResp")) { - helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); - 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")) - ); - } - - TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class); - GeneralResp generalResp = responseWrapper.getGeneralResp(); - - System.out.println("Response Wrapper:"+responseWrapper); - - - ModelMapper mapper = new ModelMapper(); - mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); - TransactionMaster transactionMaster = mapper.map(responseWrapper.getTransactionDAO(), TransactionMaster.class); - transactionMaster.setTxnId(txnId); - transactionMaster.setReqId(transactionStatusRequest.getReqId()); - EntityRelationshipUtil.linkTransactionMasterRelationships(transactionMaster); - transactionMasterRepository.save(transactionMaster); - - AgentFundTransfer agentFundTransfer = mapper.map(responseWrapper.getAgentFundTransfer(), AgentFundTransfer.class); - agentFundTransfer.setTxnId(txnId); - agentFundTransfer.setReqId(transactionStatusRequest.getReqId()); - agentFundTransfer.setTransactionMasterId(transactionMaster.getBankTxnId()); - agentFundTransferRepository.save(agentFundTransfer); - String status = generalResp.getStatus(); - LOGGER.info("Current transaction status: {}", status); - - ResponseModel responseModel = new ResponseModel( - generalResp.getMessage(), - generalResp.getStatus(), - Integer.parseInt(generalResp.getStatusCode()), - responseWrapper + try { + Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); + if (!dataMap.containsKey("generalResp")) { + helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE"); + LOGGER.warn("Invalid transaction status response for txnId={}", transactionStatusRequest.getTxnId()); + 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")) ); + } - helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); - return responseModel; + TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class); + GeneralResp generalResp = responseWrapper.getGeneralResp(); + LOGGER.info("Transaction status received: {}", generalResp.getStatus()); - } catch (JsonProcessingException e) { - LOGGER.error("Error parsing transaction status JSON: {}", e.getMessage()); - helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); - throw new CustomException("Invalid JSON received from API"); - } + ModelMapper mapper = new ModelMapper(); + mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + TransactionMaster transactionMaster = mapper.map(responseWrapper.getTransactionDAO(), TransactionMaster.class); + transactionMaster.setTxnId(txnId); + transactionMaster.setReqId(transactionStatusRequest.getReqId()); + EntityRelationshipUtil.linkTransactionMasterRelationships(transactionMaster); + transactionMasterRepository.save(transactionMaster); + LOGGER.info("TransactionMaster saved successfully for txnId={}", txnId); + + AgentFundTransfer agentFundTransfer = mapper.map(responseWrapper.getAgentFundTransfer(), AgentFundTransfer.class); + agentFundTransfer.setTxnId(txnId); + agentFundTransfer.setReqId(transactionStatusRequest.getReqId()); + agentFundTransfer.setTransactionMasterId(transactionMaster.getBankTxnId()); + agentFundTransferRepository.save(agentFundTransfer); + LOGGER.info("AgentFundTransfer entry saved successfully for txnId={}", txnId); + + ResponseModel responseModel = new ResponseModel( + generalResp.getMessage(), + generalResp.getStatus(), + Integer.parseInt(generalResp.getStatusCode()), + responseWrapper + ); + + helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); + return responseModel; + + } catch (JsonProcessingException e) { + LOGGER.error("Error parsing transaction status JSON: {}", e.getMessage(), e); + helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); + throw new CustomException("Invalid JSON received from API"); } - + } + @Override public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest) { helper.validateMerchant(transactionStatusRequest.getMid()); @@ -241,60 +239,61 @@ public class PaymentServiceImpl implements PaymentService { String requestId = transactionStatusRequest.getReqId(); String requestJson = helper.convertObjectToJson(transactionStatusRequest); String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId(); + + LOGGER.info("Checking transaction status (public) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId); + BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); headers.set("agentId", headersData.getAgentId()); headers.set("tenantId", headersData.getTenantId()); headers.setContentType(MediaType.APPLICATION_JSON); - InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", - requestJson); - OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, url, "GET", null); + + InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", requestJson); + OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, url, "GET", null); ObjectMapper objectMapper = new ObjectMapper(); - Map responseMap = httpService.getRequest(url, headers); - String responseData = responseMap.get("data"); - LOGGER.info("Transaction status response data: {}", responseData); - helper.updateOutboundLogResponse(outboundLog, responseData); + Map responseMap = httpService.getRequest(url, headers); + String responseData = responseMap.get("data"); + LOGGER.info("Transaction status response data: {}", responseData); + helper.updateOutboundLogResponse(outboundLog, responseData); - try { - Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); - - // If genericResponse key missing, throw exception - 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")) - ); - } - - - // Convert into proper DTO - TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class); - - GeneralResp generalResp = responseWrapper.getGeneralResp(); - - String status = generalResp.getStatus(); - LOGGER.info("Current transaction status: {}", status); - ResponseModel responseModel = new ResponseModel( - generalResp.getMessage(), - generalResp.getStatus(), - Integer.parseInt(generalResp.getStatusCode()), - responseWrapper + try { + Map dataMap = objectMapper.readValue(responseData, new TypeReference>() {}); + if (!dataMap.containsKey("generalResp")) { + helper.updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status"))); + LOGGER.warn("Invalid transaction status response for txnId={} from BBPS", transactionStatusRequest.getTxnId()); + 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")) ); - helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); - return responseModel; - - } catch (JsonProcessingException e) { - LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); - helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); - throw new CustomException("Invalid JSON received from API"); } + + TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class); + GeneralResp generalResp = responseWrapper.getGeneralResp(); + + String status = generalResp.getStatus(); + LOGGER.info("Current transaction status: {}", status); + + ResponseModel responseModel = new ResponseModel( + generalResp.getMessage(), + generalResp.getStatus(), + Integer.parseInt(generalResp.getStatusCode()), + responseWrapper + ); + + helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); + return responseModel; + + } catch (JsonProcessingException e) { + LOGGER.error("Error parsing responseData JSON: {}", e.getMessage(), e); + helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR"); + throw new CustomException("Invalid JSON received from API"); } } +} /* PollBack logic for the fetchTxnByTxnId API * @Override public ResponseModel fetchTxnByTxnId(BillFetchByBillIdRequest diff --git a/src/main/java/com/billpaymentservice/bbps/util/EntityRelationshipUtil.java b/src/main/java/com/billpaymentservice/bbps/util/EntityRelationshipUtil.java index 3531e69..45967c4 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/EntityRelationshipUtil.java +++ b/src/main/java/com/billpaymentservice/bbps/util/EntityRelationshipUtil.java @@ -1,6 +1,9 @@ package com.billpaymentservice.bbps.util; -import com.billpaymentservice.bbps.entites.*; +import com.billpaymentservice.bbps.entites.BillerDetails; +import com.billpaymentservice.bbps.entites.BillerResponseParams; +import com.billpaymentservice.bbps.entites.InterchangeFee; +import com.billpaymentservice.bbps.entites.TransactionMaster; public class EntityRelationshipUtil { diff --git a/src/main/java/com/billpaymentservice/bbps/util/Helper.java b/src/main/java/com/billpaymentservice/bbps/util/Helper.java index 6ce0849..71219cd 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/Helper.java +++ b/src/main/java/com/billpaymentservice/bbps/util/Helper.java @@ -3,33 +3,21 @@ package com.billpaymentservice.bbps.util; import java.security.SecureRandom; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Optional; import java.util.function.Function; -import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.billpaymentservice.bbps.dto.AdditionalInfoBillDTO; -import com.billpaymentservice.bbps.dto.AdditionalInfoDTO; import com.billpaymentservice.bbps.dto.CustomerParamDAO; -import com.billpaymentservice.bbps.dto.CustomerParamDTO; import com.billpaymentservice.bbps.dto.ResponseModel; +import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest; +import com.billpaymentservice.bbps.dto.response.BillDataResponse; import com.billpaymentservice.bbps.entites.AdditionalInfoBill; import com.billpaymentservice.bbps.entites.BBPSMastersData; -import com.billpaymentservice.bbps.exception.CustomException; -import com.billpaymentservice.bbps.repository.BBPSMasterDataRepo; -import com.billpaymentservice.bbps.repository.BillMasterRepository; -import com.billpaymentservice.bbps.repository.BillerDataRepository; -import com.billpaymentservice.bbps.repository.InboundTraceLogRepository; -import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest; -import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; -import com.billpaymentservice.bbps.dto.request.MerchantRequestModel; -import com.billpaymentservice.bbps.dto.response.BillDataResponse; -import com.billpaymentservice.bbps.entites.BBPSMerchantValidation; import com.billpaymentservice.bbps.entites.BillMaster; import com.billpaymentservice.bbps.entites.BillerDetails; import com.billpaymentservice.bbps.entites.BillerResponse; @@ -39,9 +27,11 @@ import com.billpaymentservice.bbps.entites.OutboundTraceLog; import com.billpaymentservice.bbps.entites.PaymentChannel; import com.billpaymentservice.bbps.entites.PaymentMode; import com.billpaymentservice.bbps.exception.CustomException; -import com.billpaymentservice.bbps.repository.MerchantRepository; +import com.billpaymentservice.bbps.repository.BBPSMasterDataRepo; +import com.billpaymentservice.bbps.repository.BillMasterRepository; +import com.billpaymentservice.bbps.repository.BillerDataRepository; +import com.billpaymentservice.bbps.repository.InboundTraceLogRepository; import com.billpaymentservice.bbps.repository.OutboundTraceLogRepository; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @Component