diff --git a/CHANGELOG.md b/CHANGELOG.md index dbfe0db421b5635a6afbcd126665487272c10e33..cc197aeab8a8dbf6d72593882ea0f00e3ba9cd8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Tous les changements de ce projet seront documentés dans ce document. ## [Non livré] +- Le paramètre "nomOrganisation" de l'API de chargement des inventaires devient un champ obligatoire -> [Issue2](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/2) - Intégrer des nouveaux impacts au référentiel -> [Issue1](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/1) - Defect: Mauvaise description de l'API de chargement des données d'entrées - Defect : Erreur sur le calcul comparant la date de retrait et la date d'achat pour les équipements physiques diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java index 311996e6b49d378f9c4cec73c423fa26d5a95753..60aad67f37ea07507fcf10029e705b2ce1035d92 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java @@ -21,9 +21,8 @@ public interface ImportDonneesEntreePort { String MESSAGERIE_CSV_HEADER = "nombreMailEmis;nombreMailEmisXDestinataires;volumeTotalMailEmis;MoisAnnee"; String ENTITE_CSV_HEADER = "nomEntite;nbCollaborateurs;responsableEntite;responsableNumeriqueDurable"; - ResultatImport importCsv(MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, - MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite, - String dateLot, String nomOrganisation, String nomLot); + ResultatImport importCsv(String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, + MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite); Pair<RapportImport, List<DataCenter>> importDataCenter(String nomLot, LocalDate dateLot, String nomOrganisation, MultipartFile csvDataCenter); diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java index 9a5978c9bf92e023b48f91fe6de2d8ba8eb7523f..59a633323932aa11e8fe8e10fb80d820854254da 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java @@ -53,13 +53,14 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { final Map<String, String> errorMessages; @Override - public ResultatImport importCsv(MultipartFile csvDataCenter, + public ResultatImport importCsv(String nomOrganisation, String nomLot, String dateLot, + MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, - MultipartFile csvEntite, - String dateLot, String nomOrganisation, String nomLot) { + MultipartFile csvEntite + ) { LocalDate dateLotAsDate = dateLot == null || "".equals(dateLot) ? null : LocalDate.parse(dateLot); ResultatImport resultatImport = new ResultatImport(); diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVController.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVController.java index f89236569276bdcbd539dbce4b1b15e183824c8e..80a48f93904645008f71660eeeea325f3403da9a 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVController.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVController.java @@ -41,14 +41,14 @@ public class ImportCSVController implements ImportsApi { ErrorManagementPostSaveService errorManagementPostSaveService; @Override - public ResponseEntity<List<RapportImportRest>> importCSV(String nomLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite, String dateLot, String nomOrganisation) { - return importInterneCSV(nomLot, dateLot, nomOrganisation, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); + public ResponseEntity<List<RapportImportRest>> importCSV(String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) { + return importInterneCSV(nomOrganisation, nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); } - public ResponseEntity<List<RapportImportRest>> importInterneCSV(String nomLot, String dateLot, String nomOrganisation, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) { + public ResponseEntity<List<RapportImportRest>> importInterneCSV(String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) { return ResponseEntity.ok( importDonneesFromCSV( - nomLot, dateLot, nomOrganisation, + nomOrganisation, nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, @@ -68,18 +68,18 @@ public class ImportCSVController implements ImportsApi { } public List<RapportImportRest> importDonneesFromCSV( - String nomLot, String dateLot, String nomOrganisation, + String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) throws ValidationException { - LOGGER.info("Reception de fichiers pour imports de données d'entrées : Nom de Lot : {}, Date de lot : {}, Nom Organisation : {}", nomLot, dateLot, nomOrganisation); + LOGGER.info("Reception de fichiers pour imports de données d'entrées :Nom Organisation : {}, Nom de Lot : {}, Date de lot : {}", nomOrganisation, nomLot, dateLot); - validateRequestParametersForImportCSV(nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); + validateRequestParametersForImportCSV(nomOrganisation, nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); - return importAllCsv(csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite, dateLot, nomOrganisation, nomLot); + return importAllCsv(nomOrganisation, nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); } /** @@ -95,7 +95,7 @@ public class ImportCSVController implements ImportsApi { * @param csvEntite Fichier CSV des entités * @throws ResponseStatusException avec le statut 400 lorsque les entrées ne sont pas cohérentes. */ - private void validateRequestParametersForImportCSV(String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) { + private void validateRequestParametersForImportCSV(String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) { if (CSVHelper.fileIsNullOrEmpty(csvDataCenter) && CSVHelper.fileIsNullOrEmpty(csvEquipementPhysique) && CSVHelper.fileIsNullOrEmpty(csvEquipementVirtuel) @@ -111,6 +111,10 @@ public class ImportCSVController implements ImportsApi { LOGGER.error("Import: Erreur contrôle : Le nom du Lot ne peut être pas vide"); throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Le nom du Lot ne peut être pas vide"); } + if (StringUtils.isBlank(nomOrganisation)) { + LOGGER.error("Import: Erreur contrôle : Le nom de l'organisation ne peut être pas vide"); + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, " Le nom de l'organisation ne peut être pas vide"); + } if (dateLot != null && !"".equals(dateLot)) { try { @@ -138,9 +142,9 @@ public class ImportCSVController implements ImportsApi { * @return {@link List} des {@link RapportImportRest} correspondant à l'import * @throws ValidationException en cas d'absence de donner à pousser dans le système. */ - private List<RapportImportRest> importAllCsv(MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite, String dateLot, String nomOrganisation, String nomLot) throws ValidationException { + private List<RapportImportRest> importAllCsv(String nomOrganisation, String nomLot, String dateLot, MultipartFile csvDataCenter, MultipartFile csvEquipementPhysique, MultipartFile csvEquipementVirtuel, MultipartFile csvApplication, MultipartFile csvMessagerie, MultipartFile csvEntite) throws ValidationException { // Lecture & conversion - var resultatImport = importDonneesEntreePort.importCsv(csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite, dateLot, nomOrganisation, nomLot); + var resultatImport = importDonneesEntreePort.importCsv(nomOrganisation, nomLot, dateLot, csvDataCenter, csvEquipementPhysique, csvEquipementVirtuel, csvApplication, csvMessagerie, csvEntite); saveDonneesEntreePort.save(resultatImport.getDonneesEntree()); diff --git a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml index 199c125732155977dc5664de1f8cbb1a738bc5dc..821abfa69dc5d0dfdf300e14f99f09649aae2c83 100644 --- a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml +++ b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml @@ -196,7 +196,14 @@ paths: type: object required: - nomLot + - nomOrganisation properties: + nomOrganisation: + type: string + nomLot: + type: string + dateLot: + type: string csvDataCenter: type: string format: binary @@ -215,12 +222,7 @@ paths: csvEntite: type: string format: binary - dateLot: - type: string - nomOrganisation: - type: string - nomLot: - type: string + responses: "500": description: Erreur interne du service diff --git a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVControllerTest.java b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVControllerTest.java index e8ca5bc9d0df40d9a919021536b090502444c096..a38ae6109bbf325cdd1341d3d9851d02db9489c5 100644 --- a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVControllerTest.java +++ b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/ImportCSVControllerTest.java @@ -91,7 +91,7 @@ class ImportCSVControllerTest { MockMultipartFile csvMessagerie = null; MockMultipartFile csvEntite = null; - var exception = assertThrows(ResponseStatusException.class, () -> importCSVController.importInterneCSV(nomLot, "2023-01-01", "TEST", csvDataCenters, csvEquipements, csvEquipementsVirtuels, csvApplications, csvMessagerie, csvEntite)); + var exception = assertThrows(ResponseStatusException.class, () -> importCSVController.importInterneCSV("TEST", nomLot, "2023-01-01", csvDataCenters, csvEquipements, csvEquipementsVirtuels, csvApplications, csvMessagerie, csvEntite)); assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); assertEquals("Le nom du Lot ne peut être pas vide", exception.getReason());