package com.billpaymentservice.bbps.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; 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.CloseComplaintRequest; import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest; import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO; import com.billpaymentservice.bbps.dto.request.ReOpenComplain; import com.billpaymentservice.bbps.dto.request.ViewComplainByIdRequest; import com.billpaymentservice.bbps.service.ComplainService; @RestController @RequestMapping("/complaints") @Validated @CrossOrigin(origins = "*") public class ComplainController { private static final Logger log = LoggerFactory.getLogger(ComplainController.class); private final ComplainService complainService; // ✅ Constructor name fixed and variable consistent public ComplainController(ComplainService complainService) { this.complainService = complainService; } @PostMapping(value = "/addComplain", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity addComplain(@Validated @RequestBody ComplaintRequestDTO complainRequestDTO) { ResponseModel response = complainService.addComplain(complainRequestDTO); return ResponseEntity.ok(response); } @PostMapping(value = "/checkComplaintStatus", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getComplaintStatus(@RequestBody ComplainStatusRequest request) { log.info("Received complaint status request for complaintId: {}", request.getComplaintId()); ResponseModel response = complainService.getComplaintStatus(request); return ResponseEntity.ok(response); } @PostMapping(value = "/reOpenComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity reOpenComplaint(@RequestBody ReOpenComplain request) { log.info("Received ReOpen Complaint request for complaintId: {}", request.getComplaintId()); ResponseModel response = complainService.reOpenComplaint(request); return ResponseEntity.ok(response); } @PostMapping(value = "/viewComplainsHistory", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity viewComplaintHistory(@RequestBody ComplainStatusRequest request) { log.info("Received complaint View Complaint History request for complaintId: {}", request.getComplaintId()); ResponseModel response = complainService.viewComplaintHistory(request); return ResponseEntity.ok(response); } @PostMapping(value = "/closeComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity closeComplaint(@RequestBody CloseComplaintRequest request) { log.info("Received complaint Close Complaint request for complaintId: {}", request.getComplaintId()); ResponseModel response = complainService.closeComplaint(request); return ResponseEntity.ok(response); } @PostMapping("/viewComplaintsById") public ResponseEntity viewComplaintById(@RequestBody ViewComplainByIdRequest request) { log.info("Received complaint View Complaint By ID request for complaintId: {}", request.getComplaintId()); ResponseModel response = complainService.viewComplaintById(request); return ResponseEntity.ok(response); } }