diff --git a/src/main/java/com/billpaymentservice/bbps/controller/ComplainController.java b/src/main/java/com/billpaymentservice/bbps/controller/ComplainController.java index edd5bea..856d30b 100644 --- a/src/main/java/com/billpaymentservice/bbps/controller/ComplainController.java +++ b/src/main/java/com/billpaymentservice/bbps/controller/ComplainController.java @@ -76,4 +76,10 @@ public class ComplainController { ResponseModel response = complainService.ViewAllComplaints(request); return ResponseEntity.ok(response); } + + @PostMapping(value = "/viewAllComplaintsByUserId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity viewAllComplaintsByUserId(@Validated @RequestBody AllMasterOptionsRequest request) { + ResponseModel response = complainService.viewAllComplaintsByUserId(request); + return ResponseEntity.ok(response); + } } diff --git a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java index b433832..bcecfbd 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/ComplaintResponseEntity.java @@ -63,4 +63,7 @@ public class ComplaintResponseEntity extends Auditable { @Column(name = "txn_id") private String txnId; + @Column(name = "user_id") + private String userId; + } diff --git a/src/main/java/com/billpaymentservice/bbps/repository/ComplaintResponseRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/ComplaintResponseRepository.java index f1733e2..784a82f 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/ComplaintResponseRepository.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/ComplaintResponseRepository.java @@ -1,6 +1,10 @@ package com.billpaymentservice.bbps.repository; +import java.util.List; + 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.ComplaintResponseEntity; @@ -8,4 +12,6 @@ import com.billpaymentservice.bbps.entites.ComplaintResponseEntity; @Repository public interface ComplaintResponseRepository extends JpaRepository { + @Query("SELECT c FROM ComplaintResponseEntity c WHERE c.userId = :userId") + List findByUserIdCustom(@Param("userId") String userId); } diff --git a/src/main/java/com/billpaymentservice/bbps/service/ComplainService.java b/src/main/java/com/billpaymentservice/bbps/service/ComplainService.java index 6523f44..3826d50 100644 --- a/src/main/java/com/billpaymentservice/bbps/service/ComplainService.java +++ b/src/main/java/com/billpaymentservice/bbps/service/ComplainService.java @@ -28,4 +28,6 @@ public interface ComplainService { ResponseModel ViewAllComplaints(ViewAllComplaintsTicketsRequest request); + ResponseModel viewAllComplaintsByUserId(AllMasterOptionsRequest request); + } diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/ComplainServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/ComplainServiceImpl.java index 8179a69..1af5ec0 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/ComplainServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/ComplainServiceImpl.java @@ -29,6 +29,7 @@ import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse; import com.billpaymentservice.bbps.dto.sentRequest.FetchComplaintForwardRequest; import com.billpaymentservice.bbps.dto.sentRequest.FetchTicketLatestStatusRequest; import com.billpaymentservice.bbps.entites.BharatConnectMaster; +import com.billpaymentservice.bbps.entites.ComplaintResponseEntity; import com.billpaymentservice.bbps.entites.ComplaintStatusOptionsMaster; import com.billpaymentservice.bbps.entites.InboundTraceLog; import com.billpaymentservice.bbps.entites.OutboundTraceLog; @@ -37,6 +38,7 @@ import com.billpaymentservice.bbps.exception.CustomException; import com.billpaymentservice.bbps.repository.BharatConnectMasterRepository; import com.billpaymentservice.bbps.repository.ComplainRepository; import com.billpaymentservice.bbps.repository.ComplaintOptionsStatusMasterRepository; +import com.billpaymentservice.bbps.repository.ComplaintResponseRepository; import com.billpaymentservice.bbps.repository.TransactionMasterRepository; import com.billpaymentservice.bbps.service.ComplainService; import com.billpaymentservice.bbps.util.BBPSConstant; @@ -65,6 +67,7 @@ public class ComplainServiceImpl implements ComplainService { private final ComplainRepository complainRepository; private final ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository; private final TransactionMasterRepository transactionMasterRepository; + private final ComplaintResponseRepository complaintResponseRepository; // moved to class-level private final ObjectMapper objectMapper; @@ -74,7 +77,8 @@ public class ComplainServiceImpl implements ComplainService { BharatConnectMasterRepository beneficiaryDetailsRepository, BillerMapperHelper mapperHelper, ComplainRepository complainRepository, ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository, - TransactionMasterRepository transactionMasterRepository) { + TransactionMasterRepository transactionMasterRepository, + ComplaintResponseRepository complaintResponseRepository) { this.restClient = restClient; this.httpService = httpService; this.helper = helper; @@ -86,6 +90,7 @@ public class ComplainServiceImpl implements ComplainService { // initialize shared ObjectMapper once this.objectMapper = new ObjectMapper(); this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + this.complaintResponseRepository = complaintResponseRepository; } @Override @@ -94,7 +99,8 @@ public class ComplainServiceImpl implements ComplainService { String apiName = BBPSConstant.API_ADD_COMPLAIN; String requestId = complainRequestDTO.getReqId(); String mid = complainRequestDTO.getMid(); - LOGGER.info("[{}] START | reqId={} | mid={}", apiName, requestId, mid); + String userId = complainRequestDTO.getClientUserId(); + LOGGER.info("[{}] START | reqId={} | mid={} | clientUserId={}", apiName, requestId, mid, userId); String txnId = helper.generateTxnId(15); String fullUrl = complainDataUrl + BBPSConstant.ADD_COMPLAIN_ENDPOINT; @@ -186,7 +192,7 @@ public class ComplainServiceImpl implements ComplainService { ComplaintResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintResponse.class); String saveComplaintResponseEntity = mapperHelper.saveComplaintResponseEntity(responseWrapper, requestId, - txnId); + txnId, userId); LOGGER.info("Save Complaint Response Count" + saveComplaintResponseEntity); ResponseModel responseModel = new ResponseModel(responseWrapper.getMessage(), responseWrapper.getStatus(), Integer.parseInt(responseWrapper.getStatusCode()), responseWrapper); @@ -543,7 +549,7 @@ public class ComplainServiceImpl implements ComplainService { String requestJson = helper.convertObjectToJson(request); InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), - BBPSConstant.HTTP_POST, requestJson); + BBPSConstant.HTTP_GET, requestJson); helper.validateMerchant(request.getMid()); BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId(BBPSConstant.ORG_ID); HttpHeaders headers = helper.buildHeaders(headersData); @@ -592,4 +598,69 @@ public class ComplainServiceImpl implements ComplainService { } } + @Override + public ResponseModel viewAllComplaintsByUserId(AllMasterOptionsRequest request) { + String apiName = BBPSConstant.API_VIEW_ALL_COMPLAINTS_BY_USER_ID; + String reqId = request.getReqId(); + String mid = request.getMid(); + String userId = request.getClientUserId(); + + LOGGER.info("[{}] START | reqId={} | mid={} | userId={}", apiName, reqId, mid, userId); + + String txnId = helper.generateTxnId(15); + String requestJson = helper.convertObjectToJson(request); + + InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, mid, BBPSConstant.HTTP_GET, + requestJson); + helper.validateMerchant(mid); // Validate merchant before continuing + + BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId(BBPSConstant.ORG_ID); + HttpHeaders headers = helper.buildHeaders(headersData); + + OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, apiName, BBPSConstant.HTTP_GET, + requestJson); + LOGGER.debug("Outbound log created successfully for Complaint: {}", apiName); + + try { + // Validate userId + if (userId.isEmpty() || userId == null) { + helper.updateOutboundLogResponse(outboundLog, BBPSConstant.USER_ID_IS_EMPTY); + return new ResponseModel(BBPSConstant.USER_ID_IS_EMPTY, "User ID cannot be null or empty", // Provide a + BBPSConstant.BADREQUEST, null, 0 // Return 0 as the size when no complaints + ); + } + + // Log the call to external API + LOGGER.info("[{}] Calling external API | URL={}", apiName, apiName); + List complaintUserData = complaintResponseRepository.findByUserIdCustom(userId); + + // Check if complaints were found + if (complaintUserData == null || complaintUserData.isEmpty()) { + LOGGER.info("[{}] No complaints found for userId={}", apiName, userId); + throw new CustomException("No complaints found for this User ID", "FAILED", BBPSConstant.BADREQUEST, + null); + } + + // Log the number of complaints fetched + LOGGER.info("[{}] Complaints found for userId={} | count={}", apiName, userId, complaintUserData.size()); + + // Update outbound log with the count + String count = String.valueOf(complaintUserData.size()); + helper.updateOutboundLogResponse(outboundLog, count); + + // Return successful response with complaints data + return new ResponseModel(BBPSConstant.ALL_COMPLAINT_FIELDS_FETCH, BBPSConstant.SUCCESS_RESPONSE, + BBPSConstant.HTTP_OK_INT, complaintUserData, complaintUserData.size()); + + } catch (CustomException e) { + // Rethrow custom exception for handling at the controller level + throw e; + } catch (Exception e) { + // Log generic exception and create inbound log failure + LOGGER.error("[{}] Error: {}", apiName, e.getMessage(), e); + helper.updateInboundLogFailure(inboundLog, e.getMessage(), BBPSConstant.JSON_ERROR); + throw new CustomException("An error occurred while processing the request"); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java index f8397a1..d50ee9a 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/MasterDataServiceImpl.java @@ -220,7 +220,7 @@ public class MasterDataServiceImpl implements MasterDataService { mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); BillerDetails entity = mapper.map(responseWrapper.getBillerDAO(), BillerDetails.class); EntityRelationshipUtil.linkBillerRelationships(entity);// linking nesting entity foreign key - mapperHelper.saveOrUpdateBillerData(entity); + //mapperHelper.saveOrUpdateBillerData(entity); ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()), responseWrapper); diff --git a/src/main/java/com/billpaymentservice/bbps/util/BBPSConstant.java b/src/main/java/com/billpaymentservice/bbps/util/BBPSConstant.java index 5f8d26c..f764cf0 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/BBPSConstant.java +++ b/src/main/java/com/billpaymentservice/bbps/util/BBPSConstant.java @@ -96,6 +96,7 @@ public class BBPSConstant { public static final String API_GET_ALL_MASTER_OPTIONS = "View All Options Fetch By Id"; public static final String API_CHECK_TXN_STATUS = "CheckTxnStatus"; public static final String API_VIEW_ALL_COMPLAINTS_BY_STATUS = "View_All_Complaint_By_Status_Type"; + public static final String API_VIEW_ALL_COMPLAINTS_BY_USER_ID = "View_All_Complaint_By_USER_ID"; // API names used by MasterDataServiceImpl public static final String API_GET_MASTER_DATA = "GetMasterData"; @@ -145,15 +146,17 @@ public class BBPSConstant { public static final String NULL_DATA_FROM_DB = "NULL_DATA_FROM_DB"; public static final String NO_MASTER_FIELDS_FOUND = "No master fields found"; public static final String ALL_MASTER_FIELDS_FETCH = "All master fields fetched successfully"; + public static final String ALL_COMPLAINT_FIELDS_FETCH = "All complaint fields fetched successfully"; public static final String SOMETHING_WENT_WRONG = "Something went wrong"; + public static final String USER_ID_IS_EMPTY = "User id is empty"; // Timing/delay constants (milliseconds) public static final long BILL_FETCH_DELAY_MS = 5000L; // used after initiate bill fetch public static final long BILL_VALIDATE_DELAY_MS = 12000L; // used after initiate bill validate public static final long PAYMENT_STATUS_DELAY_MS = 9000L; // used after initiate payment - - public static final String enckey="zk52olsyr9fl95h50eus8bhtyhoo5lp7"; - public static final String mid="Test-By-Aditya-1001"; - public static final String callbackurl= "https://checkout.solwio.in/PGPayU/payu/callback"; - public static final String companyName= "techwork technology"; + + public static final String enckey = "zk52olsyr9fl95h50eus8bhtyhoo5lp7"; + public static final String mid = "Test-By-Aditya-1001"; + public static final String callbackurl = "https://checkout.solwio.in/PGPayU/payu/callback"; + public static final String companyName = "techwork technology"; } \ No newline at end of file diff --git a/src/main/java/com/billpaymentservice/bbps/util/BillerMapperHelper.java b/src/main/java/com/billpaymentservice/bbps/util/BillerMapperHelper.java index 1e0d756..28507a7 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/BillerMapperHelper.java +++ b/src/main/java/com/billpaymentservice/bbps/util/BillerMapperHelper.java @@ -1191,7 +1191,7 @@ public class BillerMapperHelper { } } - public String saveComplaintResponseEntity(ComplaintResponse responseWrapper, String requestId, String txnId) { + public String saveComplaintResponseEntity(ComplaintResponse responseWrapper, String requestId, String txnId,String userId) { // 1. Convert ComplaintResponse DTO to ComplaintResponseEntity ComplaintResponseEntity complaintResponseEntity = new ComplaintResponseEntity(); @@ -1215,6 +1215,7 @@ public class BillerMapperHelper { // Set requestId and txnId from parameters complaintResponseEntity.setReqId(requestId); complaintResponseEntity.setTxnId(txnId); + complaintResponseEntity.setUserId(userId); complaintResponseEntity.setCreateDateTime(new Date()); // If you need a separate complaintTicketId, you can set it here complaintResponseEntity.setComplaintTicketId(generateComplaintTicketId()); // Generate or set manually