diff --git a/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java b/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java index c248203..705c472 100644 --- a/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java +++ b/src/main/java/com/billpaymentservice/bbps/config/RestClientConfig.java @@ -2,13 +2,14 @@ package com.billpaymentservice.bbps.config; import java.security.cert.X509Certificate; +import javax.net.ssl.HttpsURLConnection; 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.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestClient; @Configuration @@ -16,24 +17,31 @@ public class RestClientConfig { @Bean public RestClient restClient() throws Exception { - // ✅ Create trust all SSL context - SSLContext sslContext = SSLContext.getInstance("TLS"); + + // Create Trust-All SSL context TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } + public void checkClientTrusted(X509Certificate[] certs, String authType) {} + public void checkServerTrusted(X509Certificate[] certs, String authType) {} } }; + + SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); - // ✅ Create RestClient with custom SSL context + // Use JDK's Simple HTTP client with custom SSL context + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + requestFactory.setBufferRequestBody(false); + + // Apply SSL context to HttpsURLConnection globally + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); + HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); + return RestClient.builder() - .requestFactory(new HttpComponentsClientHttpRequestFactory()) + .requestFactory(requestFactory) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/billpaymentservice/bbps/dto/request/PollBackRequest.java b/src/main/java/com/billpaymentservice/bbps/dto/request/PollBackRequest.java index c477dd4..0766157 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/request/PollBackRequest.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/request/PollBackRequest.java @@ -1,10 +1,13 @@ package com.billpaymentservice.bbps.dto.request; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; @Getter @Setter -public class PollBackRequest extends BaseClass{ - private String orderId; +public class PollBackRequest extends BaseClass { + + @NotBlank(message = "order Id not be null") + private String orderId; } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java b/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java index 965351f..2acf6e9 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/BharatConnectMaster.java @@ -17,7 +17,7 @@ import lombok.Setter; @AllArgsConstructor @NoArgsConstructor @Entity -@Table(name = "Bharat_connect_master") +@Table(name = "bharat_connect_master") public class BharatConnectMaster extends Auditable { @Id diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ComplainStatus.java b/src/main/java/com/billpaymentservice/bbps/entites/ComplainStatus.java index d6a64aa..7cb9ec8 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ComplainStatus.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ComplainStatus.java @@ -7,6 +7,8 @@ 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; @@ -71,4 +73,8 @@ public class ComplainStatus extends Auditable { @Column(name = "user_id") private String userId; + + @ManyToOne + @JoinColumn(name = "complaint_response_id") + private ComplaintResponseEntity complaintResponse; } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintHistory.java b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintHistory.java index 9fed60c..adb5698 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintHistory.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintHistory.java @@ -7,6 +7,8 @@ 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.AllArgsConstructor; import lombok.Getter; @@ -46,4 +48,8 @@ public class ComplaintHistory extends Auditable { @Column(name = "user_id") private String userId; + @ManyToOne + @JoinColumn(name = "complaint_response_id") + private ComplaintResponseEntity complaintResponse; + } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java index a3cad8e..63c085c 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java @@ -1,12 +1,16 @@ package com.billpaymentservice.bbps.entites; +import java.util.List; + import com.billpaymentservice.bbps.audit.Auditable; +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.OneToMany; import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; @@ -68,4 +72,16 @@ public class ComplaintResponseEntity extends Auditable { @Column(name = "user_id") private String userId; + @OneToMany(mappedBy = "complaintResponse", cascade = CascadeType.ALL, orphanRemoval = false) + private List complaintStatusList; + + @OneToMany(mappedBy = "complaintResponse", cascade = CascadeType.ALL, orphanRemoval = false) + private List historyList; + + @OneToMany(mappedBy = "complaintResponse", cascade = CascadeType.ALL, orphanRemoval = false) + private List statusDetailsList; + + @OneToMany(mappedBy = "complaintResponse", cascade = CascadeType.ALL, orphanRemoval = false) + private List viewAllList; + } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintStatusDetails.java b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintStatusDetails.java index 2b07d00..d115f04 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintStatusDetails.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintStatusDetails.java @@ -7,6 +7,8 @@ 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; @@ -87,4 +89,8 @@ public class ComplaintStatusDetails extends Auditable { @Column(name = "biller_name") private String billerName; + @ManyToOne + @JoinColumn(name = "complaint_response_id") + private ComplaintResponseEntity complaintResponse; + } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ViewAllComplaintTicketStatusDetails.java b/src/main/java/com/billpaymentservice/bbps/entites/ViewAllComplaintTicketStatusDetails.java index 3d92701..bd3650f 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ViewAllComplaintTicketStatusDetails.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ViewAllComplaintTicketStatusDetails.java @@ -7,6 +7,8 @@ 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; @@ -86,4 +88,8 @@ public class ViewAllComplaintTicketStatusDetails extends Auditable { @Column(name = "biller_name") private String billerName; + + @ManyToOne + @JoinColumn(name = "complaint_response_id") + private ComplaintResponseEntity complaintResponse; } diff --git a/src/main/java/com/billpaymentservice/bbps/repository/BBPSMasterDataRepo.java b/src/main/java/com/billpaymentservice/bbps/repository/BBPSMasterDataRepo.java index 68a27b5..b299ea7 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/BBPSMasterDataRepo.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/BBPSMasterDataRepo.java @@ -9,6 +9,11 @@ import com.billpaymentservice.bbps.entites.BBPSMastersData; @Repository public interface BBPSMasterDataRepo extends JpaRepository { - @Query("from BBPSMastersData where mid = ?1 and isDeleted = false") - public BBPSMastersData findByMid(String mid); +// @Query("from BBPSMastersData where mid = ?1 and isDeleted = false") +// public BBPSMastersData findByMid(String mid); + + @Query(value = "SELECT * FROM bbps_master_data WHERE mid = ?1 AND is_deleted = false", + nativeQuery = true) + BBPSMastersData findByMid(String mid); + } diff --git a/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java index b04b176..7356469 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/BharatConnectMasterRepository.java @@ -1,12 +1,17 @@ package com.billpaymentservice.bbps.repository; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.billpaymentservice.bbps.entites.BharatConnectMaster; @Repository -public interface BharatConnectMasterRepository extends JpaRepository -{ - public BharatConnectMaster findByOrgId(String orgId); - +public interface BharatConnectMasterRepository extends JpaRepository { + // public BharatConnectMaster findByOrgId(String orgId); + + @Query(value = "SELECT * FROM bharat_connect_master WHERE org_id = :orgId", nativeQuery = true) + BharatConnectMaster findByOrgId(@Param("orgId") String orgId); + } diff --git a/src/main/java/com/billpaymentservice/bbps/util/Helper.java b/src/main/java/com/billpaymentservice/bbps/util/Helper.java index 1022e8e..fd2ab54 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/Helper.java +++ b/src/main/java/com/billpaymentservice/bbps/util/Helper.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.Random; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; @@ -71,19 +72,20 @@ public class Helper { BBPSMastersData merchantValidation = bbpsMasterDataRepo.findByMid(mid); if (merchantValidation == null) { - LOGGER.warn("Merchant not found for MID: {}", mid); - throw new CustomException("Merchant not found by id", "FAILED", BBPSConstant.BADREQUEST, null); + LOGGER.warn("Merchant not found for MID: {}", mid); + throw new CustomException("Merchant not found by id", "FAILED", BBPSConstant.BADREQUEST, null); } - if (merchantValidation.getApiKey() == null && merchantValidation.getSecreteKey() == null) { - LOGGER.warn("Merchant BBPS service is not active MID: {}", mid); - throw new CustomException("Merchant BBPS Service is not active by mid", "FAILED", BBPSConstant.BADREQUEST, - null); - } + if (StringUtils.isBlank(merchantValidation.getApiKey()) + && StringUtils.isBlank(merchantValidation.getSecreteKey())) { + LOGGER.warn("Merchant BBPS service is not active MID: {}", mid); + throw new CustomException("Merchant BBPS Service is not active by mid", + "FAILED", BBPSConstant.BADREQUEST, null); + } if (!Boolean.TRUE.equals(merchantValidation.getIsActive())) { - LOGGER.warn("Merchant inactive for MID: {}", mid); - throw new CustomException("Merchant is inactive", "FAILED", BBPSConstant.BADREQUEST, null); + LOGGER.warn("Merchant inactive for MID: {}", mid); + throw new CustomException("Merchant is inactive", "FAILED", BBPSConstant.BADREQUEST, null); } LOGGER.info("Merchant is valid and active for MID: {}", mid); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 4eaafbc..aaf1e10 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -20,9 +20,9 @@ swagger.server.description=Local Development Server # DataSource spring.datasource.url=jdbc:postgresql://localhost:5432/BBPS spring.datasource.username=postgres -#spring.datasource.password=UAT@DB_2025 +spring.datasource.password=UAT@DB_2025 -spring.datasource.password=himanshu@123 +#spring.datasource.password=himanshu@123 spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.type=com.zaxxer.hikari.HikariDataSource