package com.pollex.pam.web.rest; import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject; import com.pollex.pam.business.domain.Appointment; import com.pollex.pam.business.domain.Consultant; import com.pollex.pam.business.security.SecurityUtils; import com.pollex.pam.business.service.AppointmentService; import com.pollex.pam.business.service.ConsultantService; import com.pollex.pam.business.service.dto.*; import org.apache.commons.compress.utils.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.io.InputStream; import java.util.List; import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.CONSULTANT_SEND_FILL_SATISFACTION_NOTICE; import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.EDIT_CONSULTANT_DATA; @RestController @RequestMapping("/api/consultant") public class ConsultantResource { @Autowired ConsultantService consultantService; @Autowired AppointmentService appointmentService; @GetMapping("/favorite") public ResponseEntity> getMyConsultantList() { List myConsultants = consultantService.getMyConsultantList(); return new ResponseEntity<>(myConsultants, HttpStatus.OK); } @PostMapping("/favorite/view") public ResponseEntity recordMyConsultantListView() { consultantService.recordMyConsultantListView(); return ResponseEntity.noContent().build(); } @GetMapping("/recommend") public ResponseEntity> getRecommendConsultantList() { List recommendConsultantList = consultantService.getRecommendConsultantList(); return new ResponseEntity<>(recommendConsultantList, HttpStatus.OK); } @PostMapping("/favorite") public ResponseEntity addConsultantToCustomList(@RequestBody AddConsultantParam param) { consultantService.addConsultantToCustomList(param); return new ResponseEntity<>(HttpStatus.ACCEPTED); } @DeleteMapping("/favorite/{agentNo}") public ResponseEntity removeConsultantFromCustomList(@PathVariable String agentNo) { consultantService.removeConsultantFromCustomList(agentNo); return new ResponseEntity<>(HttpStatus.OK); } @PostMapping("/strictQuery") public ResponseEntity> strictQueryConsultant(@RequestBody StrictQueryConsultantParam param) { List queryResult = consultantService.strictQueryConsultant(param); return new ResponseEntity<>(queryResult, HttpStatus.OK); } @PostMapping("/fastQuery") public ResponseEntity> fastQueryConsultant(@RequestBody FastQueryConsultantParam param) { List queryResult = consultantService.fastQueryConsultant(param); return new ResponseEntity<>(queryResult, HttpStatus.OK); } @GetMapping("/detail") public ResponseEntity getConsultantDetail(@RequestParam("agentNo") String agentNo) { ConsultantDetailDTO result = consultantService.getConsultantDetail(agentNo); return new ResponseEntity<>(result, HttpStatus.OK); } @GetMapping("/getMyAppointment") public List getMyAppointment() { return consultantService.getMyAppointment(); } @GetMapping(value = "/avatar/{agentNo}", produces = MediaType.IMAGE_JPEG_VALUE) public ResponseEntity getAvatarImage(@PathVariable String agentNo) throws IOException { // try { // Resource resource = new ClassPathResource("static/consultant/" + fileName); // InputStream in = resource.getInputStream(); // return new ResponseEntity<>(IOUtils.toByteArray(in), HttpStatus.OK); // } catch (FileNotFoundException e) { // return new ResponseEntity<>(HttpStatus.NOT_FOUND); // } InputStream in = consultantService.getAvatarImage(agentNo); if(in!=null) { return new ResponseEntity<>(IOUtils.toByteArray(in), HttpStatus.OK); }else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } @PostMapping("/record/allAppointmentsView") public ResponseEntity recordAllAppointmentsView() { consultantService.recordAllAppointmentsView(); return ResponseEntity.noContent().build(); } @AuditLoggingInject(type = EDIT_CONSULTANT_DATA) @PostMapping("/edit") public ResponseEntity editConsultant(@RequestBody ConsultantEditDTO editDTO) { if(!editDTO.getAgentNo().equals(SecurityUtils.getAgentNo())) { throw new IllegalAccessError(); } Consultant editResult = consultantService.editConsultant(editDTO); return new ResponseEntity<>(editResult, HttpStatus.OK); } @AuditLoggingInject(type = CONSULTANT_SEND_FILL_SATISFACTION_NOTICE) @PostMapping("/sendSatisfactionToClient/{appointmentId}") public ResponseEntity sendSatisfactionToClient(@PathVariable Long appointmentId) { Appointment appointment = appointmentService.findById(appointmentId); if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) { throw new IllegalAccessError(); } consultantService.sendSatisfactionToClient(appointment); return ResponseEntity.noContent().build(); } }