package com.billpaymentservice.bbps.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.CrossOrigin; 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.BillerDetailRequest; import com.billpaymentservice.bbps.dto.request.ContactMasterRequest; 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.PlanRequest; import com.billpaymentservice.bbps.service.MasterDataService; import com.billpaymentservice.bbps.util.ApiDocCommonResponses; import com.billpaymentservice.bbps.util.BBPSConstant; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import jakarta.validation.Valid; @RequestMapping("/masterData") @RestController @Validated @CrossOrigin(origins = "*") public class MasterDataController { private static final Logger log = LoggerFactory.getLogger(MasterDataController.class); private final MasterDataService masterDataService; public MasterDataController(MasterDataService masterDataService) { this.masterDataService = masterDataService; } @PostMapping(value = "/getBillerDetails") @Operation(summary = "Fetch biller details", description = "Get biller details by biller id and returns the result") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Biller details fetch successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity getBillerDetails(@Valid @RequestBody BillerDetailRequest billerDetailRequest) { log.info("Received biller details request for billerId: {}", billerDetailRequest.getBillerId()); return ResponseEntity.ok(masterDataService.getBillerByBillerId(billerDetailRequest)); } @PostMapping(value = "/getContactMasterResponse") @Operation(summary = "Fetch contact master data", description = "Fetch contact master and returns the response") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Fetch contact master response fetch successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity getContactMaster( @Validated @RequestBody ContactMasterRequest contactMasterRequest) { return ResponseEntity.ok(masterDataService.getContactMaster(contactMasterRequest)); } @PostMapping(value = "/getDispostionDetail") @Operation(summary = "Fetch disposition details", description = "Fetch disposition details for a given ticket and return the response") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Disposition details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) public ResponseEntity getDispostionDetail( @Validated @RequestBody DispositionRequest dispositionDetailRequest) { return ResponseEntity.ok(masterDataService.getDispositionDetails(dispositionDetailRequest)); } @PostMapping(value = "/getTicketDispositions") @Operation(summary = "Fetch ticket disposition details", description = "Fetch ticket disposition details for a given ticket and return the response") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Ticket disposition details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) public ResponseEntity getTicketDispositions( @Validated @RequestBody DispositionRequest dispositionDetailRequest) { return ResponseEntity.ok(masterDataService.getTicketDispositions(dispositionDetailRequest)); } @PostMapping(value = "/getCustomerParamDetails") @Operation(summary = "Fetch customer parameter details by biller ID", description = "API fetches the customer parameter configuration based on the provided biller ID.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Customer parameter details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity getCustomerParamDetails( @Validated @RequestBody CustomParamRequest customerParamRequest) { log.info("Received biller details request for billerId: {}", customerParamRequest.getBillerId()); return ResponseEntity.ok(masterDataService.getCustomerParamByBillerId(customerParamRequest)); } @PostMapping("/getAllMastersData") @Operation(summary = "Fetch all master data", description = "API retrieves all the master data based on the provided .") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Master data fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseModel fetchMasterData(@Validated @RequestBody MasterRequest masterRequest) { return masterDataService.getMasterData(masterRequest); } @PostMapping(value = "/getMasterCategoryWise") @Operation(summary = "Fetch master data category-wise", description = "API retrieves master data based on the selected category.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Category-wise master data fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity getMasterDataCategoryWise( @Valid @RequestBody MasterCategoryRequest masterRequest) { return ResponseEntity.ok(masterDataService.fetchMasterDataCategoryWise(masterRequest)); } @PostMapping(value = "/customerParamGroupsByBillerId") @Operation(summary = "Fetch customer parameter groups by biller ID", description = "API retrieves all customer parameter groups configured for the specified biller ID.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Customer parameter groups fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity getCustomerParamGroup( @Validated @RequestBody BillerDetailRequest requestModel) { return ResponseEntity.ok(masterDataService.fetchCustomerParamGroup(requestModel)); } @PostMapping(value = "/fetchAmountOptionsByBillerId") @Operation(summary = "Fetch all master amount options by biller ID", description = "API retrieves all the master amount options configured for the given biller ID.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Master amount options fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity fetchAllMasterAmountOptionsByBillerId( @Validated @RequestBody BillerDetailRequest requestModel) { return ResponseEntity.ok(masterDataService.fetchAllMasterAmountOption(requestModel)); } @PostMapping(value = "/fetchAllPlanCategoriesByBillerId") @Operation(summary = "Fetch plan categories by biller ID", description = "API retrieves all plan categories available for the specified biller ID.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Plan categories fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity fetchPlanCategories(@Validated @RequestBody BillerDetailRequest requestModel) { return ResponseEntity.ok(masterDataService.fetchPlanCategorie(requestModel)); } @PostMapping(value = "/initiatingChannel") @Operation(summary = "Fetch initiating channel details by biller ID", description = "API retrieves initiating channel information configured for the specified biller ID.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Initiating channel details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity initiatingChannel(@Validated @RequestBody BillerDetailRequest requestModel) { return ResponseEntity.ok(masterDataService.fetchInitiatingChannel(requestModel)); } @PostMapping(value = "/fetchPlanByCategoryName") @Operation(summary = "Fetch plans by category name", description = "API retrieves all available plans for the specified category name.") @ApiResponses(value = { @ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Plans fetched successfully based on category name", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) }) @ApiDocCommonResponses public ResponseEntity fetchPlanByCategory(@Validated @RequestBody PlanRequest requestModel) { return ResponseEntity.ok(masterDataService.fetchPlanByCategories(requestModel)); } }