diff --git a/src/main/java/io/gmss/fiscad/controllers/infocad/metier/UploadController.java b/src/main/java/io/gmss/fiscad/controllers/infocad/metier/UploadController.java index 24c0267..c0c1bc2 100644 --- a/src/main/java/io/gmss/fiscad/controllers/infocad/metier/UploadController.java +++ b/src/main/java/io/gmss/fiscad/controllers/infocad/metier/UploadController.java @@ -1,6 +1,7 @@ package io.gmss.fiscad.controllers.infocad.metier; import io.gmss.fiscad.entities.infocad.metier.Upload; +import io.gmss.fiscad.interfaces.infocad.metier.UploadService; import io.gmss.fiscad.paylaods.ApiResponse; import io.gmss.fiscad.paylaods.JobModels; import io.gmss.fiscad.proprietes.ZipStorageProperties; @@ -8,6 +9,9 @@ import io.gmss.fiscad.persistence.repositories.infocad.metier.UploadRepository; import io.gmss.fiscad.service.FileStorageService; import io.gmss.fiscad.service.StringManager; import io.gmss.fiscad.service.ZipAsyncService; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; @@ -45,12 +49,13 @@ import java.util.UUID; @SecurityRequirement(name = "bearer") @Tag(name = "Upload") @CrossOrigin(origins = "*") -@PreAuthorize("hasRole('ADMIN') or hasRole('SUPERVISEUR') or hasRole('ENQUETEUR')") +//@PreAuthorize("hasRole('ADMIN') or hasRole('SUPERVISEUR') or hasRole('ENQUETEUR')") public class UploadController { boolean headIsValid = false; private final ZipAsyncService service; private final ZipStorageProperties props; + private final UploadService uploadService; private static final Logger logger = LoggerFactory.getLogger(UploadController.class); @Autowired @@ -94,7 +99,7 @@ public class UploadController { try { if (uploadRepository.findById(id).isPresent()) { - return new ResponseEntity<>(new ApiResponse(true, uploadRepository.getOne(id), "File with id {" + id + "} is found."), HttpStatus.OK); + return new ResponseEntity<>(new ApiResponse(true, uploadRepository.findById(id), "File with id {" + id + "} is found."), HttpStatus.OK); } else { return new ResponseEntity<>(new ApiResponse(true, null, "The upload with id {" + id + "} you request for is not found."), HttpStatus.OK); } @@ -139,30 +144,39 @@ public class UploadController { .body(resource); } - @PostMapping("/save") - public ResponseEntity save(@RequestPart(required = true) MultipartFile file, @RequestParam String reference, @RequestParam String description /*, @RequestParam Long idTypeUpload*/) { + @PostMapping( + value = "/save", + consumes = MediaType.MULTIPART_FORM_DATA_VALUE + ) + public ResponseEntity saveFilePieceId( + @Parameter( + description = "Fichier à uploader", + required = true, + content = @Content( + mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE, + schema = @Schema(type = "string", format = "binary") + ) + ) + @RequestPart("file") MultipartFile file, + @Parameter(description = "ID de la pièce", required = true) + @RequestParam("pieceId") Long pieceId + ) { try { - Upload upload = new Upload(); - String fileName = fileStorageService.storeFile(file); - upload.setFileName(fileName); - upload.setMimeType(file.getContentType()); - upload.setSize(file.getSize()); - upload.setOriginalFileName(file.getOriginalFilename()); - return new ResponseEntity<>(new ApiResponse(true, uploadRepository.save(upload), "File has been created successfully."), HttpStatus.OK); - } catch (HttpClientErrorException.MethodNotAllowed e) { - return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); - } catch (NullPointerException e) { - e.printStackTrace(); - logger.error(e.getLocalizedMessage()); - return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + return ResponseEntity.ok( + new ApiResponse(true, + uploadService.createUpload(file, pieceId), + "File has been created successfully.") + ); } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + logger.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ApiResponse(false, null, e.getMessage())); } } + @DeleteMapping("/delete/id/{id}") public ResponseEntity delete(@PathVariable Long id) { try { diff --git a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Upload.java b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Upload.java index b6033d6..fcc4b59 100644 --- a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Upload.java +++ b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Upload.java @@ -96,7 +96,7 @@ public class Upload extends BaseEntity implements Serializable { String url = this.serverContext() + fileName; System.out.println("url = " + url); // return url != null ? url.toLowerCase().startsWith("https") ? url : url.toLowerCase().replaceFirst("http", "https") : null; - return url != null ? url.toLowerCase().startsWith("https") ? url : url.toLowerCase().replaceFirst("http", "https") : null; + return url ;//!= null ? url.toLowerCase().startsWith("https") ? url : url.toLowerCase().replaceFirst("http", "https") : null; } @@ -104,10 +104,11 @@ public class Upload extends BaseEntity implements Serializable { String url= ServletUriComponentsBuilder.fromCurrentContextPath() .path("/api/upload/downloadFile/") .toUriString(); - if(!url.contains("8282/api")){ - url.replace("/api",":8282/api"); - } - + //System.out.println(url); +// if(!url.contains("8282/api")){ +// url.replace("/api",":8282/api"); +// } + //System.out.println(url); return url; } diff --git a/src/main/java/io/gmss/fiscad/entities/infocad/parametre/Personne.java b/src/main/java/io/gmss/fiscad/entities/infocad/parametre/Personne.java index 7dd90fd..fb062e0 100644 --- a/src/main/java/io/gmss/fiscad/entities/infocad/parametre/Personne.java +++ b/src/main/java/io/gmss/fiscad/entities/infocad/parametre/Personne.java @@ -10,6 +10,7 @@ import io.gmss.fiscad.entities.infocad.metier.Tpe; import io.gmss.fiscad.entities.infocad.metier.Upload; import io.gmss.fiscad.entities.metadata.MobileDataPersonne; import io.gmss.fiscad.enums.Categorie; +import io.gmss.fiscad.enums.EtatIdentificationPersonne; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -79,7 +80,12 @@ public class Personne extends BaseEntity implements Serializable { private int mustHaveRepresentant; private String filePath; + @Enumerated(EnumType.STRING) + private EtatIdentificationPersonne etatIdentificationPersonne; private String observation; + private String numeroRccm ; + private LocalDate dateRccm ; + private String email ; @ColumnDefault("false") private boolean synchronise; diff --git a/src/main/java/io/gmss/fiscad/enums/EtatIdentificationPersonne.java b/src/main/java/io/gmss/fiscad/enums/EtatIdentificationPersonne.java new file mode 100755 index 0000000..d98ad71 --- /dev/null +++ b/src/main/java/io/gmss/fiscad/enums/EtatIdentificationPersonne.java @@ -0,0 +1,8 @@ +package io.gmss.fiscad.enums; + +public enum EtatIdentificationPersonne { + IFU, + NPI, + IFU_NPI, + NEANT; +} diff --git a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/PersonneServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/PersonneServiceImpl.java index a13d4ce..fb5609d 100644 --- a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/PersonneServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/PersonneServiceImpl.java @@ -210,7 +210,7 @@ public class PersonneServiceImpl implements PersonneService { private List recherchePersonneLocal(RecherchePersonneResquestBody recherchePersonneResquestBody) { List personnePayLoadWebs= - personneRepository.findByFilters( + personneRepository.findByFiltersInBaseIfuNpiCorrecte( recherchePersonneResquestBody.getIfu()==null?null:recherchePersonneResquestBody.getIfu().trim().toLowerCase(), recherchePersonneResquestBody.getNpi()==null?null:recherchePersonneResquestBody.getNpi().trim().toLowerCase(), recherchePersonneResquestBody.getNom()==null?null:recherchePersonneResquestBody.getNom().trim().toLowerCase(), diff --git a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/UploadServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/UploadServiceImpl.java new file mode 100644 index 0000000..4916b6b --- /dev/null +++ b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/UploadServiceImpl.java @@ -0,0 +1,98 @@ +package io.gmss.fiscad.implementations.infocad.metier; + +import io.gmss.fiscad.entities.infocad.metier.Piece; +import io.gmss.fiscad.entities.infocad.metier.Upload; +import io.gmss.fiscad.entities.rfu.metier.Batiment; +import io.gmss.fiscad.exceptions.BadRequestException; +import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.interfaces.infocad.metier.UploadService; +import io.gmss.fiscad.paylaods.request.crudweb.UploadPayLoadWeb; +import io.gmss.fiscad.persistence.repositories.infocad.metier.PieceRepository; +import io.gmss.fiscad.persistence.repositories.infocad.metier.UploadRepository; +import io.gmss.fiscad.service.EntityFromPayLoadService; +import io.gmss.fiscad.service.FileStorageService; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Optional; +@AllArgsConstructor +@Service +public class UploadServiceImpl implements UploadService { + private final EntityFromPayLoadService entityFromPayLoadService; + private final UploadRepository uploadRepository; + private final PieceRepository pieceRepository; + private final FileStorageService fileStorageService; + @Override + public UploadPayLoadWeb createUpload(UploadPayLoadWeb uploadPayLoadWeb) throws BadRequestException { + if (uploadPayLoadWeb.getId() != null) { + throw new BadRequestException("Impossible de créer un nouveau upload ayant un id non null."); + } + Upload upload= entityFromPayLoadService.getUploadFromPayLoadWeb(uploadPayLoadWeb); + upload= uploadRepository.save(upload); + return uploadRepository.findByIdToDto(upload.getId()).orElse(null); + } + + + @Override + public Upload createUpload(MultipartFile file, @RequestParam Long pieceId) throws BadRequestException { + Upload upload = new Upload(); + if(pieceId!=null && !pieceRepository.existsById(pieceId)) { + throw new NotFoundException("La piece n'existe pas"); + } + Optional optionalPiece = pieceRepository.findById(pieceId); + String fileName = fileStorageService.storeFile(file); + upload.setPiece(optionalPiece.orElse(null)); + upload.setFileName(fileName); + upload.setRename(fileName); + upload.setMimeType(file.getContentType()); + upload.setSize(file.getSize()); + upload.setOriginalFileName(file.getOriginalFilename()); + upload = uploadRepository.save(upload) ; + return upload; + } + + @Override + public UploadPayLoadWeb updateUpload(Long id, UploadPayLoadWeb uploadPayLoadWeb) throws NotFoundException { + return null; + } + + @Override + public void deleteUpload(Long id) throws NotFoundException { + Optional optionalUpload = uploadRepository.findById(id); + if (optionalUpload.isPresent()) { + uploadRepository.deleteById(optionalUpload.get().getId()); + } else { + throw new NotFoundException("Impossible de trouver le fichier spécifié dans notre base de données."); + } + } + + @Override + public Page getUploadListToDtoPageable(Pageable pageable) { + return null; + } + + @Override + public List getUploadListToDto() { + return null; + } + + @Override + public Optional getUploadByToDto(Long id) { + return Optional.empty(); + } + + @Override + public List getAllUploadByPieceToDto(Long id) { + return uploadRepository.findByPieceId(id); + } + + @Override + public Page getAllUploadByPieceDtoPageable(Long id, Pageable pageable) { + return null; + } +} diff --git a/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/UploadService.java b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/UploadService.java new file mode 100755 index 0000000..fe0fd86 --- /dev/null +++ b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/UploadService.java @@ -0,0 +1,31 @@ +package io.gmss.fiscad.interfaces.infocad.metier; + +import io.gmss.fiscad.entities.infocad.metier.Upload; +import io.gmss.fiscad.exceptions.BadRequestException; +import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.paylaods.request.crudweb.UploadPayLoadWeb; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Optional; + +public interface UploadService { + + UploadPayLoadWeb createUpload(UploadPayLoadWeb piecePayLoadWeb) throws BadRequestException; + Upload createUpload(MultipartFile file, @RequestParam Long pieceId) throws BadRequestException; + + UploadPayLoadWeb updateUpload(Long id, UploadPayLoadWeb piecePayLoadWeb) throws NotFoundException; + + void deleteUpload(Long id) throws NotFoundException; + + Page getUploadListToDtoPageable(Pageable pageable); + + List getUploadListToDto(); + + Optional getUploadByToDto(Long id); + List getAllUploadByPieceToDto(Long id); + Page getAllUploadByPieceDtoPageable(Long id,Pageable pageable); +} diff --git a/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/UploadPayLoadWeb.java b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/UploadPayLoadWeb.java index ae0cbad..5dad308 100644 --- a/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/UploadPayLoadWeb.java +++ b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/UploadPayLoadWeb.java @@ -1,18 +1,20 @@ package io.gmss.fiscad.paylaods.request.crudweb; +import jakarta.persistence.Transient; import lombok.Data; +import lombok.NoArgsConstructor; @Data public class UploadPayLoadWeb { private Long id; private Long pieceId; - private String Observation; + // private String Observation; //private boolean synchronise; //private String fileBase64; ///////////////////////////////// private String name; private String filePath; - private Long enqueteId; + // private Long enqueteId; private Long enqueteBatimentId; private Long personneId; private Long enqueteUniteLogementId; @@ -20,5 +22,34 @@ public class UploadPayLoadWeb { private String reference; private String description; private String rename; + private String fileName; + private String originalFileName; + @Transient + private String URIFile; + private String checkSum; + private long size; + private String mimeType; + + public UploadPayLoadWeb() { + } + + public UploadPayLoadWeb(Long id, Long pieceId, String name, String filePath, Long enqueteBatimentId, Long personneId, Long enqueteUniteLogementId, Long declarationNcId, String reference, String description, String rename, + String fileName,String originalFileName) { + this.id = id; + this.pieceId = pieceId; + //Observation = observation; + this.name = name; + this.filePath = filePath; + //this.enqueteId = enqueteId; + this.enqueteBatimentId = enqueteBatimentId; + this.personneId = personneId; + this.enqueteUniteLogementId = enqueteUniteLogementId; + this.declarationNcId = declarationNcId; + this.reference = reference; + this.description = description; + this.rename = rename; + this.fileName = fileName; + this.originalFileName = originalFileName; + } } diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/UploadRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/UploadRepository.java index 1007964..2be93ac 100644 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/UploadRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/UploadRepository.java @@ -3,11 +3,13 @@ package io.gmss.fiscad.persistence.repositories.infocad.metier; import io.gmss.fiscad.entities.infocad.metier.Upload; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; import io.gmss.fiscad.entities.rfu.metier.EnqueteUniteLogement; +import io.gmss.fiscad.paylaods.request.crudweb.UploadPayLoadWeb; import io.gmss.fiscad.paylaods.response.restoration.UploadPayLoadRestor; import jakarta.transaction.Transactional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; @@ -80,4 +82,49 @@ public interface UploadRepository extends JpaRepository { List findByPersonne_IdAndPieceIsNullAndMembreGroupeIsNull(Long personneId); + + @Query(""" + SELECT new io.gmss.fiscad.paylaods.request.crudweb.UploadPayLoadWeb( + u.id, + u.piece.id, + u.name, + u.filePath, + u.enqueteBatiment.id, + u.personne.id, + u.enqueteUniteLogement.id, + u.declarationNc.id, + u.reference, + u.description, + u.rename, + u.fileName, + u.originalFileName + ) + FROM Upload u + WHERE u.id = :uploadId + """) + Optional findByIdToDto(@Param("uploadId") Long uploadId); + + + @Query(""" + SELECT new io.gmss.fiscad.paylaods.request.crudweb.UploadPayLoadWeb( + u.id, + u.piece.id, + u.name, + u.filePath, + u.enqueteBatiment.id, + u.personne.id, + u.enqueteUniteLogement.id, + u.declarationNc.id, + u.reference, + u.description, + u.rename, + u.fileName, + u.originalFileName + ) + FROM Upload u + WHERE u.piece.id = :pieceId + """) + List findByPieceId(@Param("pieceId") Long pieceId); + + } diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/parametre/PersonneRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/parametre/PersonneRepository.java index e0de2ff..cce74f9 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/parametre/PersonneRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/parametre/PersonneRepository.java @@ -83,7 +83,9 @@ public interface PersonneRepository extends JpaRepository { io.gmss.fiscad.enums.Origine.RFU_LOGIL ) FROM Personne p - WHERE (:ifu IS NULL OR LOWER(trim(p.ifu)) LIKE (CONCAT('%', :ifu, '%'))) + WHERE + p.etatIdentificationPersonne <> io.gmss.fiscad.enums.EtatIdentificationPersonne.NEANT + AND (:ifu IS NULL OR LOWER(trim(p.ifu)) LIKE (CONCAT('%', :ifu, '%'))) AND (:npi IS NULL OR LOWER(trim(p.npi)) LIKE (CONCAT('%', :npi, '%'))) AND (:nom IS NULL OR LOWER(trim(p.nom)) LIKE (CONCAT('%', :nom, '%'))) AND (:prenom IS NULL OR LOWER(trim(p.prenom)) LIKE (CONCAT('%', :prenom, '%'))) @@ -92,7 +94,7 @@ public interface PersonneRepository extends JpaRepository { AND (:dateNaissance IS NULL OR p.dateNaissanceOuConsti = :dateNaissance) """ ) - List findByFilters( + List findByFiltersInBaseIfuNpiCorrecte( @Param("ifu") String ifu, @Param("npi") String npi, @Param("nom") String nom, diff --git a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java index 51b32b4..d0bbfc6 100644 --- a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java +++ b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java @@ -206,7 +206,7 @@ public class EntityFromPayLoadService { public Upload getUploadFromPayLoadWeb(UploadPayLoadWeb uploadPayLoadWeb){ Upload upload=new Upload(); - //Optional optionalEnquete=Optional.empty() ; + Optional optionalPiece=Optional.empty() ; Optional optionalDeclarationNc=Optional.empty(); Optional optionalPersonne=Optional.empty(); Optional optionalEnqueteBatiment=Optional.empty(); @@ -224,8 +224,14 @@ public class EntityFromPayLoadService { optionalEnqueteBatiment=enqueteBatimentRepository.findById(uploadPayLoadWeb.getEnqueteBatimentId()); if(uploadPayLoadWeb.getEnqueteUniteLogementId()!=null) optionalEnqueteUniteLogement=enqueteUniteLogementRepository.findById(uploadPayLoadWeb.getEnqueteUniteLogementId()); + + if(uploadPayLoadWeb.getPieceId()!=null) + optionalPiece=pieceRepository.findById(uploadPayLoadWeb.getPieceId()); + + upload.setId(uploadPayLoadWeb.getId()); - upload.setEnqueteId(uploadPayLoadWeb.getEnqueteId()); + upload.setPiece(optionalPiece.orElse(null)); + //upload.setEnqueteId(uploadPayLoadWeb.getEnqueteId()); upload.setEnqueteBatiment(optionalEnqueteBatiment.orElse(null)); upload.setPersonne(optionalPersonne.orElse(null)); upload.setEnqueteUniteLogement(optionalEnqueteUniteLogement.orElse(null)); diff --git a/uploads/0255a8bec8644523852e73eaeee7ef55.pdf b/uploads/0255a8bec8644523852e73eaeee7ef55.pdf new file mode 100644 index 0000000..ed1fd49 Binary files /dev/null and b/uploads/0255a8bec8644523852e73eaeee7ef55.pdf differ diff --git a/uploads/d4c3b2245e004bec8ffece027271380b.pdf b/uploads/d4c3b2245e004bec8ffece027271380b.pdf new file mode 100644 index 0000000..88ca862 Binary files /dev/null and b/uploads/d4c3b2245e004bec8ffece027271380b.pdf differ