package ec.edu.espe.movilidad.MovilidadWS.Controller; import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavConvoca; import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavConvoca.IServiceUzyTavConvoca; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; import java.util.NoSuchElementException; import static ec.edu.espe.movilidad.MovilidadWS.Constant.GlobalConstants.V1_API_VERSION; @RestController @CrossOrigin(origins = "*") @RequestMapping(V1_API_VERSION+"/convoca") public class UzyTavConvocaController { private final IServiceUzyTavConvoca serviceUzyTavConvoca; @Autowired public UzyTavConvocaController(IServiceUzyTavConvoca serviceUzyTavConvoca) { this.serviceUzyTavConvoca = serviceUzyTavConvoca; } @PostMapping("/guardarnuevo") public ResponseEntity<DtoUzyTavConvoca> saveUzyTavConvoca( @RequestParam("file") MultipartFile file, @ModelAttribute DtoUzyTavConvoca dtoUzyTavConvoca) throws IOException { dtoUzyTavConvoca.setUzytavconvoca_digital(file); DtoUzyTavConvoca savedUzyTavConvoca = serviceUzyTavConvoca.save(dtoUzyTavConvoca); if (savedUzyTavConvoca != null) { return ResponseEntity.ok(savedUzyTavConvoca); } else { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } @PutMapping("editar/{uzytavconvoca_id}") public ResponseEntity<DtoUzyTavConvoca> edit( @PathVariable("uzytavconvoca_id") Long uzytavconvocaId, @ModelAttribute DtoUzyTavConvoca dtoUzyTavConvoca) { try { DtoUzyTavConvoca updatedUzyTavConvoca = serviceUzyTavConvoca.edit(uzytavconvocaId, dtoUzyTavConvoca); return ResponseEntity.ok(updatedUzyTavConvoca); } catch (NoSuchElementException e) { // Manejar la excepción en caso de no encontrar el objeto a editar return ResponseEntity.notFound().build(); } catch (IllegalArgumentException e) { // Manejar la excepción en caso de parámetros incorrectos return ResponseEntity.badRequest().build(); } catch (IOException e) { // Manejar la excepción en caso de error al guardar el archivo return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } @GetMapping("/exampleFindId/{id}") public ResponseEntity<DtoUzyTavConvoca> listarPorID(@PathVariable("id") Long id) { DtoUzyTavConvoca dto = serviceUzyTavConvoca.ListarPorID(id); if (dto != null) { return ResponseEntity.ok(dto); } else { return ResponseEntity.notFound().build(); } } @GetMapping("/getAll") public ResponseEntity<List<DtoUzyTavConvoca>> listarRegistros() { List<DtoUzyTavConvoca> dtos = serviceUzyTavConvoca.ListarRegistros(); return ResponseEntity.ok(dtos); } @DeleteMapping("/eliminar/{id}") public ResponseEntity<Void> eliminar(@PathVariable Long id) { serviceUzyTavConvoca.eliminar(id); return ResponseEntity.ok().build(); } @DeleteMapping("/eliminarConPDF/{uzytavconvoca_id}") public ResponseEntity<String> eliminarConPDF(@PathVariable("uzytavconvoca_id") Long uzytavconvocaId) { try { serviceUzyTavConvoca.eliminarConPDF(uzytavconvocaId); return ResponseEntity.ok("Registro eliminado exitosamente."); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body("Error al eliminar el registro: " + e.getMessage()); } } @GetMapping("/verPDF/{id}") public ResponseEntity<byte[]> obtenerContenidoPDF(@PathVariable("id") Long convocaId) { String fileName = serviceUzyTavConvoca.obtenerNombrePDF(convocaId); byte[] pdfContent = serviceUzyTavConvoca.obtenerContenidoPDF(convocaId); if (pdfContent != null && fileName != null) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_PDF); headers.setContentDisposition(ContentDisposition.builder("inline").filename(fileName).build()); return new ResponseEntity<>(pdfContent, headers, HttpStatus.OK); } else { return ResponseEntity.notFound().build(); } } }