package com.billpaymentservice.bbps.serviceImpl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import com.billpaymentservice.bbps.dto.MasterApiResponse; import com.billpaymentservice.bbps.dto.request.BillerDetailRequest; import com.billpaymentservice.bbps.dto.request.MerchantRequestModel; import com.billpaymentservice.bbps.dto.response.BillerDataResponse; import com.billpaymentservice.bbps.dto.response.BillerResponse; import com.billpaymentservice.bbps.entites.BBPSMerchantValidation; import com.billpaymentservice.bbps.exception.AppException; import com.billpaymentservice.bbps.repository.MerchantRepository; import com.billpaymentservice.bbps.service.MasterDataService; import com.billpaymentservice.bbps.util.BBPSConstant; import com.billpaymentservice.bbps.util.ResponseParser; import jakarta.servlet.http.HttpServletRequest; @Service public class MasterDataServiceImpl implements MasterDataService { private static final Logger LOGGER = LoggerFactory.getLogger(MasterDataServiceImpl.class); @Value("${master.data.url}") private String masterRegisterUrl; @Autowired private MerchantRepository merchantRegisterRepo; @Autowired private HttpClientApi httpClientApi; @Autowired private ResponseParser responseParser; @Override public BillerDataResponse getBillerByBillerId(BillerDetailRequest billerDetailRequest) { // TODO Auto-generated method stub return null; } @Override public ResponseEntity> getMasterData(MerchantRequestModel requestModel, HttpServletRequest request) { LOGGER.info("Request DTO" + request); BBPSMerchantValidation merchantValidation = merchantRegisterRepo.findByMid(requestModel.getMid()); List responseModel = new ArrayList<>(); // if Start merchant validations if (Optional.ofNullable(merchantValidation).isPresent()) { // if Start merchant active check if (merchantValidation.isActive()) { LOGGER.info("mid Value: " + requestModel.getMid() + " secret Value: " + requestModel.getSecretKey() + "txt Value: " + requestModel); String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL; HashMap response = httpClientApi.getRequestForPaymentStatus(fullUrl); LOGGER.info("BBPS bank response data: " + response.get("data") + " code: " + response.get("respCode")); // if Start merchant cehck response code if (response.get("respCode") != null && response.get("respCode").toString().contains("200")) { LOGGER.info("Response -: " + response.get("data")); String jsonData = response.get("data").toString(); MasterApiResponse generalResponse = responseParser.parseResponse(jsonData); LOGGER.info("kkk" + generalResponse.toString()); // 5️⃣ Prepare API response model responseModel.add(generalResponse); } else { LOGGER.warn("Unexpected response code: " + response.get("respCode")); } } else { LOGGER.info("Merchant Not Active for mid - " + requestModel.getMid()); throw new AppException("Merchant Not Active", BBPSConstant.CODE_MERCHANT_INACTIVE); } } else { LOGGER.info("Merchant Not Valid for mid - " + requestModel.getMid()); throw new AppException("Merchant Not Valid", BBPSConstant.CODE_MERCHANT_INVALID); } return ResponseEntity.ok(responseModel); } @Override public ResponseEntity fetchMasterDataCategoryWise(MerchantRequestModel requestModel, String category, int pageStart, int pageEnd) { LOGGER.info("Fetching Master Data Category-wise for MID={}, Category={}, PageStart={}, PageEnd={}", requestModel.getMid(), category, pageStart, pageEnd); //bollean //if(validate(arequetsModel) BBPSMerchantValidation merchantValidation = merchantRegisterRepo.findByMid(requestModel.getMid()); BillerResponse responseModel = new BillerResponse(); // if Start merchant validations if (Optional.ofNullable(merchantValidation).isPresent()) { // if Start merchant active check if (merchantValidation.isActive()) { LOGGER.info("mid Value: " + requestModel.getMid() + " secret Value: " + requestModel.getSecretKey() + "txt Value: " + requestModel); // 2️⃣ Build API URL String fullUrl = String.format("%s%s?category=%s&page=%d&pagesize=%d", masterRegisterUrl, BBPSConstant.BILLER_URL, category, pageStart, pageEnd); LOGGER.info("Calling Master API: {}", fullUrl); HashMap response = httpClientApi.getRequestForPaymentStatus(fullUrl); LOGGER.info("BBPS bank response data: " + response.get("data") + " code: " + response.get("respCode")); // if Start merchant cehck response code if (response.get("respCode") != null && response.get("respCode").toString().contains("200")) { LOGGER.info("Response -: " + response.get("data")); String jsonData = response.get("data").toString(); responseModel = responseParser.billerResponse(jsonData); LOGGER.info("kkk" + responseModel.toString()); // 5️⃣ Prepare API response model } else { LOGGER.warn("Unexpected response code: " + response.get("respCode")); } } else { LOGGER.info("Merchant Not Active for mid - " + requestModel.getMid()); throw new AppException("Merchant Not Active", BBPSConstant.CODE_MERCHANT_INACTIVE); } } else { LOGGER.info("Merchant Not Valid for mid - " + requestModel.getMid()); throw new AppException("Merchant Not Valid", BBPSConstant.CODE_MERCHANT_INVALID); } return ResponseEntity.ok(responseModel); } }