Se agregan los servicios de ModelUzyTavAnexoSPR

parent a64898aa
package ec.edu.espe.movilidad.MovilidadWS.Controller;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavAnexoSPR.IServiceUzyTavAnexoSPR;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static ec.edu.espe.movilidad.MovilidadWS.Constant.GlobalConstants.V1_API_VERSION;
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;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping(V1_API_VERSION+"/anexos")
public class UzyTavAnexoSPRController {
private final IServiceUzyTavAnexoSPR serviceUzyTavAnexoSPR;
@Autowired
public UzyTavAnexoSPRController(IServiceUzyTavAnexoSPR serviceUzyTavAnexoSPR) {
this.serviceUzyTavAnexoSPR = serviceUzyTavAnexoSPR;
}
@PostMapping("/guardarnuevo")
public ResponseEntity<DtoUzyTavAnexoSPR> saveUzyTavConvoca(
@RequestParam("file") MultipartFile file,
@ModelAttribute DtoUzyTavAnexoSPR dtoUzyTavAnexoSPR) throws IOException {
dtoUzyTavAnexoSPR.setUzytavanexospr_digital(file);
DtoUzyTavAnexoSPR savedUzyTavConvoca = serviceUzyTavAnexoSPR.save(dtoUzyTavAnexoSPR);
if (savedUzyTavConvoca != null) {
return ResponseEntity.ok(savedUzyTavConvoca);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@GetMapping("/exampleFindId/{id}")
public ResponseEntity<DtoUzyTavAnexoSPR> listarPorID(@PathVariable("id") Long id) {
DtoUzyTavAnexoSPR dto = serviceUzyTavAnexoSPR.ListarPorID(id);
if (dto != null) {
return ResponseEntity.ok(dto);
} else {
return ResponseEntity.notFound().build();
}
}
@GetMapping("/getAll")
public ResponseEntity<List<DtoUzyTavAnexoSPR>> listarRegistros() {
List<DtoUzyTavAnexoSPR> dtos = serviceUzyTavAnexoSPR.ListarRegistros();
return ResponseEntity.ok(dtos);
}
@GetMapping("/verImagen/{uzytavanexospr_id}")
public ResponseEntity<byte[]> obtenerContenidoPDF(@PathVariable("uzytavanexospr_id") Long uzytavanexospr_id) {
String fileName = serviceUzyTavAnexoSPR.obtenerNombrePDF(uzytavanexospr_id);
byte[] pdfContent = serviceUzyTavAnexoSPR.obtenerContenidoPDF(uzytavanexospr_id);
if (pdfContent != null && fileName != null) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
headers.setContentType(MediaType.IMAGE_PNG);
headers.setContentDisposition(ContentDisposition.builder("inline").filename(fileName).build());
return new ResponseEntity<>(pdfContent, headers, HttpStatus.OK);
} else {
return ResponseEntity.notFound().build();
}
}
@DeleteMapping("/eliminar/{uzytavanexospr_id}")
public ResponseEntity<String> eliminarConPDF(@PathVariable("uzytavanexospr_id") Long uzytavanexospr_id) {
try {
serviceUzyTavAnexoSPR.eliminarConPDF(uzytavanexospr_id);
return ResponseEntity.ok("Registro eliminado exitosamente.");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Error al eliminar el registro: " + e.getMessage());
}
}
}
......@@ -17,5 +17,6 @@ public class DtoUzyTavAnexoSPR {
private Long uzytavanexospr_tipo;
private Long uzytavprograma_v_id;
private String uzytavanexospr_descripcion;
private MultipartFile uzytavanexospr_digital;
}
package ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTaValorPar;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavCabParaevaf;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTaValorPar;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavCabParaevaf;
import org.modelmapper.ModelMapper;
import org.modelmapper.PropertyMap;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class UzyTavAnexoSPRMapper {
private final ModelMapper modelMapper;
public UzyTavAnexoSPRMapper(ModelMapper modelMapper) {
this.modelMapper = modelMapper;
configureMappings();
}
public DtoUzyTavAnexoSPR entityToDto(ModelUzyTavAnexoSPR entity) {
......@@ -20,4 +30,20 @@ public class UzyTavAnexoSPRMapper {
public ModelUzyTavAnexoSPR dtoToEntity(DtoUzyTavAnexoSPR dto) {
return modelMapper.map(dto, ModelUzyTavAnexoSPR.class);
}
public List<DtoUzyTavAnexoSPR> entitiesToDtos(List<ModelUzyTavAnexoSPR> entities) {
return entities.stream()
.map(this::entityToDto)
.collect(Collectors.toList());
}
private void configureMappings() {
modelMapper.addMappings(new PropertyMap<ModelUzyTavAnexoSPR, DtoUzyTavAnexoSPR>() {
@Override
protected void configure() {
map().setUzytavanexospr_id(source.getUzytavanexospr_id());
map().setUzytusuario_id(source.getUzytusuario().getUzytusuario_id());
}
});
}
}
package ec.edu.espe.movilidad.MovilidadWS.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
......@@ -33,6 +34,9 @@ public class ModelUzyTavAnexoSPR {
@Column(name = "uzytavprograma_v_id")
private Long uzytavprograma_v_id;
@Column(name = "uzytavanexospr_digital", columnDefinition = "BLOB")
private byte[] uzytavanexospr_digital;
@Column(name = "uzytavanexospr_descripcion")
private String uzytavanexospr_descripcion;
//RELACION CON PROYEC-TABLA PADRE
......@@ -41,6 +45,7 @@ public class ModelUzyTavAnexoSPR {
private ModelUzyTavProyec uzytavproyec;
//RELACIÓN CON USUARIO-TABLA PADRE
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "uzytusuario_id")
private ModelUzyTUsuario uzytusuario;
......
......@@ -13,10 +13,13 @@ public class FileStorageService implements IFileStorageService {
private final Path rootFolder = Paths.get("uploads");
private final Path rootFolderIMG = Paths.get("uploadsIMG");
@Override
public String saveFile(MultipartFile file, String fileName, boolean overwrite) {
try {
Path filePath = rootFolder.resolve(fileName);
// Verificar si el archivo ya existe y si se permite la sobrescritura
if (Files.exists(filePath) && !overwrite) {
throw new FileAlreadyExistsException("File already exists: " + fileName);
......@@ -65,4 +68,12 @@ public class FileStorageService implements IFileStorageService {
}
/////////////
}
\ No newline at end of file
package ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavConvoca;
import java.io.IOException;
import java.util.List;
public interface IServiceUzyTavAnexoSPR {
DtoUzyTavAnexoSPR ListarPorID(Long id);
List<DtoUzyTavAnexoSPR> ListarRegistros();
DtoUzyTavAnexoSPR save(DtoUzyTavAnexoSPR dtoUzyTavAnexoSPR)throws IOException;
DtoUzyTavAnexoSPR edit(Long uzytavanexospr_id, DtoUzyTavAnexoSPR dtoUzyTavAnexoSPR)throws IOException;
void eliminar(Long id);
byte[] obtenerContenidoPDF(Long uzytavanexospr_id);
String obtenerUrlPDF(Long uzytavanexospr_id);
String obtenerNombrePDF(Long uzytavanexospr_id);
void eliminarConPDF(Long uzytavanexospr_id);
}
package ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTavAnexoSPRMapper;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavAnexoSPR;
import ec.edu.espe.movilidad.MovilidadWS.Service.FileStorage.IFileStorageService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
@Service
public class ServiceUzyTavAnexoSPR implements IServiceUzyTavAnexoSPR{
private final DaoUzyTavAnexoSPR daoUzyTavAnexoSPR;
private final UzyTavAnexoSPRMapper mapper;
private final Path rootFolder= Paths.get("uploads");
private final IFileStorageService fileStorageService;
public ServiceUzyTavAnexoSPR(DaoUzyTavAnexoSPR daoUzyTavAnexoSPR, UzyTavAnexoSPRMapper mapper, IFileStorageService fileStorageService) {
this.daoUzyTavAnexoSPR = daoUzyTavAnexoSPR;
this.mapper = mapper;
this.fileStorageService = fileStorageService;
}
@Override
public DtoUzyTavAnexoSPR ListarPorID(Long id) {
Optional<ModelUzyTavAnexoSPR> optionalUzyTavConvoca = daoUzyTavAnexoSPR.findById(id);
if (optionalUzyTavConvoca.isPresent()) {
ModelUzyTavAnexoSPR model = optionalUzyTavConvoca.get();
return mapper.entityToDto(model);
}
return null;
}
@Override
public List<DtoUzyTavAnexoSPR> ListarRegistros() {
List<ModelUzyTavAnexoSPR> entities = daoUzyTavAnexoSPR.findAll();
return mapper.entitiesToDtos(entities);
}
@Override
public DtoUzyTavAnexoSPR save(DtoUzyTavAnexoSPR dtoUzyTavAnexoSPR) throws IOException {
MultipartFile file = dtoUzyTavAnexoSPR.getUzytavanexospr_digital();
if (file != null && !file.isEmpty()) {
// Guardar el archivo en una ubicación temporal
String tempFileName = "temp_" + file.getOriginalFilename();
String tempFilePath = fileStorageService.saveFile(file, tempFileName, true);
// Guardar el registro en la base de datos para generar el ID
ModelUzyTavAnexoSPR uzyTavAnexoSPR = mapper.dtoToEntity(dtoUzyTavAnexoSPR);
uzyTavAnexoSPR = daoUzyTavAnexoSPR.save(uzyTavAnexoSPR);
// Generar el nombre del archivo con el ID generado por la base de datos
Long uzytavanexospr_id = uzyTavAnexoSPR.getUzytavanexospr_id();
String fileName = uzytavanexospr_id + "_" + file.getOriginalFilename();
// Mueve el archivo de la ubicación temporal a la ubicación final
String fileUrl = fileStorageService.moveFile(tempFilePath, fileName, true);
uzyTavAnexoSPR.setUzytavanexospr_nombre(fileName);
uzyTavAnexoSPR.setUzytavanexospr_url(fileUrl);
// Actualiza el registro en la base de datos con el nombre y la URL del archivo
uzyTavAnexoSPR = daoUzyTavAnexoSPR.save(uzyTavAnexoSPR);
return mapper.entityToDto(uzyTavAnexoSPR);
} else {
// No se proporcionó ningún archivo, guardar solo el registro en la base de datos
ModelUzyTavAnexoSPR uzyTavConvoca = mapper.dtoToEntity(dtoUzyTavAnexoSPR);
uzyTavConvoca = daoUzyTavAnexoSPR.save(uzyTavConvoca);
return mapper.entityToDto(uzyTavConvoca);
}
}
@Override
public DtoUzyTavAnexoSPR edit(Long uzytavanexospr_id, DtoUzyTavAnexoSPR dtoUzyTavAnexoSPR) throws IOException {
return null;
}
@Override
public void eliminar(Long id) {
daoUzyTavAnexoSPR.deleteById(id);
}
@Override
public byte[] obtenerContenidoPDF(Long uzytavanexospr_id) {
Optional<ModelUzyTavAnexoSPR> optionalConvoca = daoUzyTavAnexoSPR.findById(uzytavanexospr_id);
if (optionalConvoca.isPresent()) {
ModelUzyTavAnexoSPR convoca = optionalConvoca.get();
String fileName = convoca.getUzytavanexospr_nombre();
if (fileName != null && !fileName.isEmpty()) {
Path filePath = rootFolder.resolve(fileName);
try {
return Files.readAllBytes(filePath);
} catch (IOException e) {
throw new RuntimeException("Failed to read PDF file: " + fileName, e);
}
}
}
return null;
}
@Override
public String obtenerUrlPDF(Long uzytavanexospr_id) {
Optional<ModelUzyTavAnexoSPR> optionalUzyTavConvoca = daoUzyTavAnexoSPR.findById(uzytavanexospr_id);
if (optionalUzyTavConvoca.isPresent()) {
ModelUzyTavAnexoSPR uzyTavConvoca = optionalUzyTavConvoca.get();
String fileName = uzyTavConvoca.getUzytavanexospr_nombre();
if (fileName != null && !fileName.isEmpty()) {
return rootFolder.resolve(fileName).toString();
}
}
return null;
}
@Override
public String obtenerNombrePDF(Long uzytavanexospr_id) {
Optional<ModelUzyTavAnexoSPR> optionalUzyTavConvoca = daoUzyTavAnexoSPR.findById(uzytavanexospr_id);
if (optionalUzyTavConvoca.isPresent()) {
ModelUzyTavAnexoSPR uzyTavConvoca = optionalUzyTavConvoca.get();
return uzyTavConvoca.getUzytavanexospr_nombre();
}
return null;
}
@Override
public void eliminarConPDF(Long uzytavanexospr_id) {
Optional<ModelUzyTavAnexoSPR> optionalUzyTavConvoca = daoUzyTavAnexoSPR.findById(uzytavanexospr_id);
if (optionalUzyTavConvoca.isPresent()) {
ModelUzyTavAnexoSPR uzyTavConvoca = optionalUzyTavConvoca.get();
String fileName = uzyTavConvoca.getUzytavanexospr_nombre();
if (fileName != null && !fileName.isEmpty()) {
// Eliminar el archivo PDF
Path filePath = rootFolder.resolve(fileName);
try {
Files.deleteIfExists(filePath);
} catch (IOException e) {
throw new RuntimeException("Failed to delete file: " + fileName, e);
}
}
// Eliminar el registro de la base de datos
daoUzyTavAnexoSPR.deleteById(uzytavanexospr_id);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment