From 911add1f378a41a1df551fcb035a88a8bee171ba Mon Sep 17 00:00:00 2001
From: OURY Sarah <sarah.oury@soprasteria.com>
Date: Mon, 4 Mar 2024 16:32:20 +0000
Subject: [PATCH] [SOY] Nom organisation obligatoire

---
 CHANGELOG.md                                  |  1 +
 .../ports/input/ImportDonneesEntreePort.java  |  5 ++--
 .../impl/ImportDonneesEntreePortImpl.java     |  7 ++---
 .../controller/ImportCSVController.java       | 26 +++++++++++--------
 .../src/main/resources/static/openapi.yaml    | 14 +++++-----
 5 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index dbfe0db4..cc197aea 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 311996e6..60aad67f 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 9a5978c9..59a63332 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 f8923656..80a48f93 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 199c1257..821abfa6 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
-- 
GitLab