diff --git a/CHANGELOG.md b/CHANGELOG.md index 625c26bb07362c99d34e114a334a2c47db22a8a5..da9cb47da6146e26cd69fa1dee58827361276ddc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document. ## [Non livré] +- Nettoyage : Suppression complète du calcul de l'impact du réseau à partir d'un équipement physique de type réseau (donc suppression des champs goTelecharge et nbJourUtiliseAn dans l'inventaire des équipements physiques). Désormais, l'impact du réseau se calcule grâce aux opérations non IT -> [Issue10](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/10) - Customisation des référentiels par organisation : les référentiels TypeItem, FacteurCaracterisation, CorrespondanceRefEquipement et Hypotheses peuvent être personnalisés par une organisation -> [Issue9](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/9) ## [2.1.0] - 2024-08-02 diff --git a/docs/DonneeEntree.plantuml b/docs/DonneeEntree.plantuml index ffb8cbd25448601035f9b1c59fa04b56b8965b22..0daa1f54918d03496e0e442676b113f3bdc92829 100644 --- a/docs/DonneeEntree.plantuml +++ b/docs/DonneeEntree.plantuml @@ -66,8 +66,6 @@ Double dureeUsageAmont ' la durée d'usage aval correspond à la durée (en années) de troisième vie d'un équipement, une fois que ce dernier a été sorti de l'organisation Double dureeUsageAval Double consoElecAnnuelle -Float nbJourUtiliseAn -Float goTelecharge Integer quantite String modeUtilisation Double tauxUtilisation diff --git a/docs/MoteurDeCalculG4IT_V1.1.adoc b/docs/MoteurDeCalculG4IT_V1.1.adoc index 4329f42d3301042a47898b791b3d0d0c41a11aa8..e12ff20ba3fdddcf3c6fdf092a2a063dcf42b9fc 100644 --- a/docs/MoteurDeCalculG4IT_V1.1.adoc +++ b/docs/MoteurDeCalculG4IT_V1.1.adoc @@ -309,10 +309,6 @@ CalculDesIndicateurs(en_DonneesEntree) { FIN BOUCLE FIN BOUCLE FIN SI - - // Calcul de l'impact réseau associé à ces équipements - CalculImpactReseau(en_EqP, etape, critere, ind_ImpactReseau) - FIN BOUCLE BOUCLE SUR CHAQUE en_OpNIT de en_DonneesEntree @@ -398,7 +394,7 @@ Tous les objets de trace de calcul possèdent un champ "formule" permettant de v La formule se présente comme un calcul mathématique avec le nom des variables et leurs valeurs entre parenthèses. _Exemple de valeur pour le champ formule :_ -`ImpactEquipementPhysique = (Quantité(1.0) * ConsoElecAnMoyenne(29.198638586342973) * MixElectrique(0.0813225) * NbJourUtiliseAn(365.0) * tauxUtilisation(1.0)) / 365` +`ImpactEquipementPhysique = (Quantité(1.0) * ConsoElecAnMoyenne(29.198638586342973) * MixElectrique(0.0813225) * tauxUtilisation(1.0)) / 365` _Les formules originales (sans variable) sont visibles dans les différentes règles de calcul._ diff --git a/docs/Traces.plantuml b/docs/Traces.plantuml index c93a538230b5865aa6b33bae3c5dab8835e3e027..984b5fa230571097aa839feae5f25d4dd62ba54d 100644 --- a/docs/Traces.plantuml +++ b/docs/Traces.plantuml @@ -15,7 +15,6 @@ class TraceCalculImpactEquipementPhysique { String nomCourtDataCenter ConsoElecAnMoyenne consoElecAnMoyenne MixElectrique mixElectrique - NbJourUtiliseAn nbJourUtiliseAn Double valeurReferentielImpactEquipement String sourceReferentielImpactEquipement DureeDeVie dureeDeVie @@ -96,17 +95,9 @@ class MixElectrique { String pays } -class NbJourUtiliseAn { - Double equipementNbJourUtiliseAn - Double valeurReferentielHypothese - String sourceReferentielHypothese - Double valeur -} - ConsoElecAnMoyenne "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir > DureeDeVie "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir > MixElectrique "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir > -NbJourUtiliseAn "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir > ConsoElecAnMoyenne "0-1" -up- "1" TraceCalculOperationNonIT : peut contenir > DureeDeVie "0-1" -up- "1" TraceCalculOperationNonIT : peut contenir > diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java index e3a93ebb821c20752e70cf4c9e6ae379c94c28f5..993a86630e22e07c0dbcb2fceec370c60c372a48 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java @@ -105,31 +105,6 @@ public class IndicateurController { } } - @GetMapping("/reseauCsv") - public String getReseauList( - @RequestParam String nomLot, - @RequestParam String nomOrganisation, - @RequestParam String fields - ) { - - try (Connection conn = dataSource.getConnection()) { - try (var ps = conn.prepareStatement(String.format(""" - SELECT %s - FROM ind_indicateur_impact_reseau - WHERE nom_lot = ? AND nom_organisation = ? - ORDER BY nom_equipement, critere, etapeacv; - """, fields))) { - - ps.setString(1, nomLot); - ps.setString(2, nomOrganisation); - return resultSetToCsv(ps.executeQuery()); - } - } catch (SQLException e) { - log.error("SQl exception", e); - throw new RuntimeException(e); - } - } - @GetMapping("/operationNonITCsv") public String getOperationNonITList( @RequestParam String nomLot, diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/EquipementPhysiqueRepository.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/EquipementPhysiqueRepository.java index af9a3e6ea70e99703142601ad741b108d8aa2baa..9bfc474a287ac315704992d6705fc94f1aafeb80 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/EquipementPhysiqueRepository.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/EquipementPhysiqueRepository.java @@ -59,7 +59,6 @@ public class EquipementPhysiqueRepository { .dureeUsageInterne(ResultSetUtils.getDouble(rs, "duree_usage_interne")) .dureeUsageAmont(ResultSetUtils.getDouble(rs, "duree_usage_amont")) .dureeUsageAval(ResultSetUtils.getDouble(rs, "duree_usage_aval")) - .goTelecharge(ResultSetUtils.getFloat(rs, "go_telecharge")) .modele(rs.getString("modele")) .nbCoeur(rs.getString("nb_coeur")) .paysDUtilisation(rs.getString("pays_utilisation")) diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java index c26afae5e373e9fb4eb232156ea32fb530b941eb..9befd1469fa6779bac6516e87c85ab36173bb87e 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java @@ -71,14 +71,6 @@ public class IndicateurRepository { VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """; - private static final String INSERT_RESEAU_QUERY = """ - INSERT INTO ind_indicateur_impact_reseau - (date_calcul, date_lot, date_lot_discriminator, nom_organisation, nom_organisation_discriminator, - etapeacv, critere, nom_equipement, nom_entite, nom_entite_discriminator, source, statut_indicateur, - trace, version_calcul, impact_unitaire, unite, nom_lot, nom_source_donnee, nom_source_donnee_discriminator) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - """; - /** * Sauvegarde tous les indicateurs en base de données e * @@ -341,15 +333,6 @@ public class IndicateurRepository { ps.setString(2, nomEquipementPhysique); ps.execute(); } - - try (var ps = conn.prepareStatement(""" - DELETE FROM ind_indicateur_impact_reseau - WHERE nom_lot = ? AND nom_equipement = ? - """)) { - ps.setString(1, nomLot); - ps.setString(2, nomEquipementPhysique); - ps.execute(); - } conn.commit(); } catch (SQLException e) { log.error("Une erreur s'est produite lors de l'insertion dans PostgreSQL. Exception: ", e); diff --git a/services/api-event-calculs/src/main/resources/schema.sql b/services/api-event-calculs/src/main/resources/schema.sql index 115c76329bcb13382655b3e6cc783ec1a62d5f45..5cf3dc589514b03bba8f1ee8f2a7b0b69bb45c3c 100644 --- a/services/api-event-calculs/src/main/resources/schema.sql +++ b/services/api-event-calculs/src/main/resources/schema.sql @@ -135,29 +135,6 @@ CREATE TABLE IF NOT EXISTS ind_indicateur_impact_messagerie nom_source_donnee_discriminator varchar(255) NOT NULL DEFAULT('') ); -CREATE TABLE IF NOT EXISTS ind_indicateur_impact_reseau -( - date_calcul timestamp NULL, - date_lot date NULL, - nom_lot varchar(255) NULL, - etapeacv varchar(255) NULL, - critere varchar(255) NULL, - "source" varchar(255) NULL, - statut_indicateur varchar(255) NULL, - trace text NULL, - version_calcul varchar(255) NULL, - impact_unitaire float8 NULL, - unite varchar(255) NULL, - nom_entite varchar(255) NULL, - nom_organisation varchar(255) NULL, - nom_source_donnee varchar(255) NULL, - nom_equipement varchar(255) NULL, - date_lot_discriminator date NOT NULL DEFAULT('1970-01-01'), - nom_organisation_discriminator varchar(255) NOT NULL DEFAULT(''), - nom_entite_discriminator varchar(255) NOT NULL DEFAULT(''), - nom_source_donnee_discriminator varchar(255) NOT NULL DEFAULT('') -); - ALTER TABLE IF EXISTS ind_indicateur_impact_equipement_physique ADD COLUMN IF NOT EXISTS qualite varchar(255) NULL DEFAULT ''; ALTER TABLE IF EXISTS ind_indicateur_impact_application ADD COLUMN IF NOT EXISTS qualite varchar(255) NULL DEFAULT ''; ALTER TABLE IF EXISTS ind_indicateur_impact_equipement_virtuel ADD COLUMN IF NOT EXISTS qualite varchar(255) NULL DEFAULT ''; @@ -170,9 +147,9 @@ ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT E CREATE INDEX IF NOT EXISTS idx_ind_eq_p__nom_lot_nom_equipement ON ind_indicateur_impact_equipement_physique (nom_lot, nom_equipement); CREATE INDEX IF NOT EXISTS idx_ind_eq_v__nom_lot_nom_equipement ON ind_indicateur_impact_equipement_virtuel (nom_lot, nom_equipement); CREATE INDEX IF NOT EXISTS idx_ind_app__nom_lot_nom_equipement ON ind_indicateur_impact_application (nom_lot, nom_equipement_physique); -CREATE INDEX IF NOT EXISTS idx_ind_reseau__nom_lot_nom_equipement ON ind_indicateur_impact_reseau (nom_lot, nom_equipement); CREATE INDEX IF NOT EXISTS idx_ind_operation_non_it__nom_lot_nom_item_non_it ON ind_indicateur_impact_operation_non_it (nom_lot, nom_item_non_it); -- Lignes a supprimer dans les futures versions ALTER TABLE ind_indicateur_impact_equipement_virtuel ADD COLUMN IF NOT EXISTS nom_equipement_virtuel VARCHAR(255); ALTER TABLE ind_indicateur_impact_application ADD COLUMN IF NOT EXISTS nom_equipement_virtuel VARCHAR(255); +DROP TABLE IF EXISTS ind_indicateur_impact_reseau; diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java index 35979fc3f22d7b96bddcda90785b1d611381edfc..fefa1b0ea742938483c8a4913b03cf418c609f01 100644 --- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java +++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java @@ -132,10 +132,9 @@ class ApiEventCalculsApplicationTests { Assertions.assertEquals(4, actualImpactApp.size()); /* Check all statutIndicateur = OK */ - // Assertions.assertTrue(actualImpactEqPh.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); - // Assertions.assertTrue(actualImpactEqV.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); - // Assertions.assertTrue(actualImpactApp.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); - // Assertions.assertTrue(actualImpactReseau.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); + Assertions.assertTrue(actualImpactEqPh.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); + Assertions.assertTrue(actualImpactEqV.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); + Assertions.assertTrue(actualImpactApp.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur()))); } diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java index e6d6ab827a47913b2fb228c0ff38a73d3d50b064..0cc66173af1361a3d654b0dc6d069c8687b954e6 100644 --- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java +++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java @@ -56,8 +56,6 @@ class EnrichissementEquipementPhysiqueServiceTest { "dateAchat": "2016-06-17", "dateRetrait": "2023-06-16", "nomCourtDatacenter": "default", - "nbJourUtiliseAn": null, - "goTelecharge": 0.0, "quantite": 7.0, "consoElecAnnuelle": null, "serveur": true, diff --git a/services/api-event-calculs/src/test/resources/input/equipementPhysique.json b/services/api-event-calculs/src/test/resources/input/equipementPhysique.json index eeb19664d61bd7d03ba91d184784442e29815d61..5c658153ab21b721f9e27a98612d2b2498f59651 100644 --- a/services/api-event-calculs/src/test/resources/input/equipementPhysique.json +++ b/services/api-event-calculs/src/test/resources/input/equipementPhysique.json @@ -35,8 +35,6 @@ "dateRetrait": "2023-06-16", "nbCoeur": null, "nomCourtDatacenter": "default", - "nbJourUtiliseAn": null, - "goTelecharge": 0.0, "quantite": 7.0, "consoElecAnnuelle": null, "serveur": true, diff --git a/services/api-event-donneesentrees/src/main/java/org/mte/numecoeval/donneesentrees/infrastructure/config/EquipementPhysiqueIntegrationConfig.java b/services/api-event-donneesentrees/src/main/java/org/mte/numecoeval/donneesentrees/infrastructure/config/EquipementPhysiqueIntegrationConfig.java index b85346829c63b87f4b519f9335e4d289e4931408..68392378d1ec3e5db8a9042592e895f4bbed0227 100644 --- a/services/api-event-donneesentrees/src/main/java/org/mte/numecoeval/donneesentrees/infrastructure/config/EquipementPhysiqueIntegrationConfig.java +++ b/services/api-event-donneesentrees/src/main/java/org/mte/numecoeval/donneesentrees/infrastructure/config/EquipementPhysiqueIntegrationConfig.java @@ -121,7 +121,6 @@ public class EquipementPhysiqueIntegrationConfig { .dureeUsageInterne(ResultSetUtils.getDouble(rs, "duree_usage_interne")) .dureeUsageAmont(ResultSetUtils.getDouble(rs, "duree_usage_amont")) .dureeUsageAval(ResultSetUtils.getDouble(rs, "duree_usage_aval")) - .goTelecharge(ResultSetUtils.getFloat(rs, "go_telecharge")) .modele(rs.getString("modele")) .nbCoeur(rs.getString("nb_coeur")) .modeUtilisation(rs.getString("mode_utilisation")) diff --git a/services/api-event-donneesentrees/src/test/resources/sql/equipment_physique.sql b/services/api-event-donneesentrees/src/test/resources/sql/equipment_physique.sql index 8340ef882de7ec7a6990c4dc684e01f1ff63cc75..bafc63577454252fdf756987ea41afd807b3489e 100644 --- a/services/api-event-donneesentrees/src/test/resources/sql/equipment_physique.sql +++ b/services/api-event-donneesentrees/src/test/resources/sql/equipment_physique.sql @@ -4,11 +4,11 @@ VALUES (6002, '2023-03-08 19:45:39.484539', 'ENTITE|2022-01-01', '2022-01-01', ' 'EN_ATTENTE', NULL, 'SOURCE_A'); INSERT INTO en_equipement_physique (id, date_creation, nom_lot, date_lot, nom_organisation, conso_elec_annuelle, - date_achat, date_retrait, duree_vie_defaut, duree_usage_interne, duree_usage_amont, duree_usage_aval, go_telecharge, modele, nb_coeur, mode_utilisation, taux_utilisation, - nb_jour_utilise_an, nom_court_datacenter, nom_entite, + date_achat, date_retrait, duree_vie_defaut, duree_usage_interne, duree_usage_amont, duree_usage_aval, + modele, nb_coeur, mode_utilisation, taux_utilisation, nom_court_datacenter, nom_entite, nom_equipement_physique, pays_utilisation, quantite, serveur, statut, "type", utilisateur, statut_traitement, date_update, nom_source_donnee, qualite) -VALUES (376826, '2023-03-23 15:53:51.179031', 'ENTITE|2022-01-01', '2022-01-01', 'ENTITE', NULL, '2022-01-01', NULL, 8.0, 5.0, 1.0, 2.0, 0.0, - 'computer monitor-01-55', '','BYOD',0.4, 365.0, '', 'ENTITE', '2023-03-09-Ecran-105', 'France', 13.0, false, 'actif', 'Ecran', +VALUES (376826, '2023-03-23 15:53:51.179031', 'ENTITE|2022-01-01', '2022-01-01', 'ENTITE', NULL, '2022-01-01', NULL, 8.0, 5.0, 1.0, 2.0, + 'computer monitor-01-55', '','BYOD',0.4, '', 'ENTITE', '2023-03-09-Ecran-105', 'France', 13.0, false, 'actif', 'Ecran', '', 'EN_ATTENTE', NULL, 'SOURCE_A','HAUTE'); diff --git a/services/api-event-donneesentrees/src/test/resources/sql/schema.sql b/services/api-event-donneesentrees/src/test/resources/sql/schema.sql index 02c3eb7151d756b3d0a455b48062e37094a961bc..68027050d77fb8986a8c2d44782f0accef3a890d 100644 --- a/services/api-event-donneesentrees/src/test/resources/sql/schema.sql +++ b/services/api-event-donneesentrees/src/test/resources/sql/schema.sql @@ -48,10 +48,8 @@ CREATE TABLE IF NOT EXISTS en_equipement_physique duree_usage_interne float8 NULL, duree_usage_amont float8 NULL, duree_usage_aval float8 NULL, - go_telecharge float4 NULL, modele varchar(255) NULL, nb_coeur varchar(255) NULL, - nb_jour_utilise_an float8 NULL, nom_court_datacenter varchar(255) NULL, nom_entite varchar(255) NULL, nom_equipement_physique varchar(255) NULL, @@ -170,4 +168,7 @@ ALTER TABLE IF EXISTS en_equipement_physique ADD COLUMN IF NOT EXISTS qualite va ALTER TABLE IF EXISTS en_application ADD COLUMN IF NOT EXISTS qualite varchar(255); ALTER TABLE IF EXISTS en_operation_non_it ADD COLUMN IF NOT EXISTS qualite varchar(255); ALTER TABLE IF EXISTS en_equipement_virtuel ADD COLUMN IF NOT EXISTS qualite varchar(255); -ALTER TABLE IF EXISTS en_data_center ADD COLUMN IF NOT EXISTS qualite varchar(255); \ No newline at end of file +ALTER TABLE IF EXISTS en_data_center ADD COLUMN IF NOT EXISTS qualite varchar(255); + +ALTER TABLE IF EXISTS en_equipement_physique DROP COLUMN IF EXISTS nb_jour_utilise_an; +ALTER TABLE IF EXISTS en_equipement_physique DROP COLUMN IF EXISTS go_telecharge; \ No newline at end of file diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/EquipementPhysique.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/EquipementPhysique.java index 784dcb39abd443f6139449637fd6c9956a511687..21b1516bd93ef40fd151bc89778a222c0a6a6080 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/EquipementPhysique.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/EquipementPhysique.java @@ -29,8 +29,6 @@ public class EquipementPhysique extends AbstractEntree { Double dureeUsageAval; String nbCoeur; String nomCourtDatacenter; - Double nbJourUtiliseAn; - Float goTelecharge; Double consoElecAnnuelle; boolean serveur; String nomEntite; 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 9c2275c29a7ef6b10c74014e4696c3af6d186f67..c881228b0a8857ceb5af8444a44fa93dee7641d6 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 @@ -220,8 +220,6 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { // CA 1.1 rapportImport.getErreurs().add(errorMessages.get("TYPE_ITEM_INCONNU").formatted(csvRecord.get("type"), CSVHelper.safeString(csvRecord, LABEL_NOM_EQUIPEMENT_PHYSIQUE, "equipement"))); } else { - var goTelechargeStr = CSVHelper.safeString(csvRecord, "goTelecharge"); - Float goTelecharge = goTelechargeStr == null ? null : NumberUtils.toFloat(goTelechargeStr); var dureeUsageInterneStr = CSVHelper.safeString(csvRecord, "dureeUsageInterne"); Double dureeUsageInterne = NumberUtils.isCreatable(dureeUsageInterneStr) ? NumberUtils.toDouble(dureeUsageInterneStr) : null; var dureeUsageAmontStr = CSVHelper.safeString(csvRecord, "dureeUsageAmont"); @@ -259,10 +257,8 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { .dureeUsageAval(dureeUsageAval) .nbCoeur(CSVHelper.safeString(csvRecord, "nbCoeur")) .nomCourtDatacenter(CSVHelper.safeString(csvRecord, "nomCourtDatacenter", "refDatacenter")) - .goTelecharge(goTelecharge) .modeUtilisation(CSVHelper.safeString(csvRecord, "modeUtilisation")) .tauxUtilisation(tauxUtilisation) - .nbJourUtiliseAn(CSVHelper.safeDouble(csvRecord, "nbJourUtiliseAn")) .consoElecAnnuelle(CSVHelper.safeDouble(csvRecord, "consoElecAnnuelle")) .serveur(refTypeEquipementOpt.get().isServeur()) .nomEntite(CSVHelper.safeString(csvRecord, HEADER_NOM_ENTITE)) diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/EquipementPhysiqueEntity.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/EquipementPhysiqueEntity.java index fb4a9d7f5fd1ed6b2b5cdfb20d7e68e81a8a87e6..f5f678ff92d587274244b7241d35e3fac369b628 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/EquipementPhysiqueEntity.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/EquipementPhysiqueEntity.java @@ -39,8 +39,6 @@ public class EquipementPhysiqueEntity extends AbstractEntreeEntity { private Double dureeUsageAval; private String nbCoeur; private String nomCourtDatacenter; - private Double nbJourUtiliseAn; - private Float goTelecharge; private Double consoElecAnnuelle; private boolean serveur; private Double dureeVieDefaut; diff --git a/services/api-expositiondonneesentrees/src/main/resources/schema.sql b/services/api-expositiondonneesentrees/src/main/resources/schema.sql index 827e8916abd3e8ab6ecf14807d834ed0d36d68f8..01c6195401522ca78980f9ff195840217a7d137f 100644 --- a/services/api-expositiondonneesentrees/src/main/resources/schema.sql +++ b/services/api-expositiondonneesentrees/src/main/resources/schema.sql @@ -51,10 +51,8 @@ CREATE TABLE IF NOT EXISTS en_equipement_physique duree_usage_amont float8 NULL, duree_usage_aval float8 NULL, duree_vie_defaut float8 NULL, - go_telecharge float4 NULL, modele varchar(255) NULL, nb_coeur varchar(255) NULL, - nb_jour_utilise_an float8 NULL, nom_court_datacenter varchar(255) NULL, nom_entite varchar(255) NULL, nom_equipement_physique varchar(255) NULL, @@ -220,3 +218,6 @@ CREATE INDEX IF NOT EXISTS idx_en_operation_non_it_nom_lot ON en_operation_non_i CREATE INDEX IF NOT EXISTS idx_en_equipement_virtuel_nom_equipement_physique ON en_equipement_virtuel (nom_equipement_physique); -- Accelere la recuperation des applications d'un equipement virtuel CREATE INDEX IF NOT EXISTS idx_en_application_nom_equipement_physique_et_virtuel ON en_application (nom_equipement_physique, nom_equipement_virtuel); + +ALTER TABLE IF EXISTS en_equipement_physique DROP COLUMN IF EXISTS nb_jour_utilise_an; +ALTER TABLE IF EXISTS en_equipement_physique DROP COLUMN IF EXISTS go_telecharge; \ No newline at end of file diff --git a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml index bd72cdfd0e22dc16c29c8dfa8eb860c7d9aaa0ef..002c02bc3ee5ac9df48b97a630d296f575d355ea 100644 --- a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml +++ b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml @@ -198,7 +198,7 @@ paths: Le Header du CSV des data centers est : nomCourtDatacenter;nomLongDatacenter;pue;localisation;(nomEntite);(qualite). <br/> - Le Header du CSV des équipements physiques est : nomEquipementPhysique,modele;quantite;nomCourtDatacenter;(dateAchat);(dateRetrait);(dureeUsageInterne);(dureeUsageAmont);(dureeUsageAval);type;statut;paysDUtilisation;consoElecAnnuelle;utilisateur;(nomSourceDonnee);(nomEntite);nbCoeur;nbJourUtiliseAn;goTelecharge;(modeUtilisation);(tauxUtilisation);(qualite). <br/> + Le Header du CSV des équipements physiques est : nomEquipementPhysique,modele;quantite;nomCourtDatacenter;(dateAchat);(dateRetrait);(dureeUsageInterne);(dureeUsageAmont);(dureeUsageAval);type;statut;paysDUtilisation;consoElecAnnuelle;utilisateur;(nomSourceDonnee);(nomEntite);nbCoeur;(modeUtilisation);(tauxUtilisation);(qualite). <br/> Le Header du CSV des équipements virtuels est : nomEquipementVirtuel;nomEquipementPhysique;(nomSourceDonneeEquipementPhysique);(cleRepartition);vCPU;cluster;(consoElecAnnuelle);(typeEqv);(capaciteStockage);(nomEntite);(qualite). <br/> @@ -513,12 +513,6 @@ components: nomCourtDatacenter: description: "" type: string - nbJourUtiliseAn: - description: "" - type: number - goTelecharge: - description: "" - type: number quantite: description: "" type: number diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/ImpactReseau.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/ImpactReseau.java deleted file mode 100644 index c3a6672a045a16754019f290124da8d2fe1dec40..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/ImpactReseau.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.mte.numecoeval.referentiel.domain.model; - - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.Accessors; -import lombok.experimental.FieldDefaults; - -@Getter -@Setter -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@FieldDefaults(level = AccessLevel.PRIVATE) -@NoArgsConstructor -@AllArgsConstructor -public class ImpactReseau implements AbstractReferentiel { - - String refReseau; - String etape; - String critere; - String source; - Double valeur; - Double consoElecMoyenne; - - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/id/ImpactReseauId.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/id/ImpactReseauId.java deleted file mode 100644 index 135c83425d1d2f1cfa95dfe5933a98c7feec3284..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/model/id/ImpactReseauId.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.mte.numecoeval.referentiel.domain.model.id; - -import lombok.*; -import lombok.experimental.Accessors; -import lombok.experimental.FieldDefaults; - -import java.io.Serializable; - -@Getter -@Setter -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@FieldDefaults(level = AccessLevel.PRIVATE) -@NoArgsConstructor -@AllArgsConstructor -@ToString - -public class ImpactReseauId implements Serializable { - - String refReseau; - String etape; - String critere; - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/ports/input/impl/ImportImpactReseauPortImpl.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/ports/input/impl/ImportImpactReseauPortImpl.java deleted file mode 100644 index c4d6e0d79b333553839064ba030d8e62ade3ace7..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/domain/ports/input/impl/ImportImpactReseauPortImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.mte.numecoeval.referentiel.domain.ports.input.impl; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVRecord; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.domain.data.ResultatImport; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.ports.input.ImportCSVReferentielPort; - -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -@Slf4j -public class ImportImpactReseauPortImpl implements ImportCSVReferentielPort<ImpactReseauDTO> { - private static final String HEADER_REF_RESEAU = "refReseau"; - private static final String HEADER_ETAPE_ACV = "etapeACV"; - private static final String HEADER_CRITERE = "critere"; - private static final String HEADER_VALEUR = "valeur"; - private static final String HEADER_CONSO_ELEC_MOYENNE = "consoElecMoyenne"; - private static final String[] HEADERS = new String[]{ - HEADER_REF_RESEAU, HEADER_ETAPE_ACV, HEADER_CRITERE, HEADER_VALEUR, - HEADER_CONSO_ELEC_MOYENNE, "source" - }; - - public static String[] getHeaders() { - return HEADERS; - } - - public void checkCSVRecord(CSVRecord csvRecord) throws ReferentielException { - checkAllHeadersAreMapped(csvRecord, HEADERS); - checkFieldIsMappedAndNotBlankInCSVRecord(csvRecord, HEADER_REF_RESEAU); - checkFieldIsMappedAndNotBlankInCSVRecord(csvRecord, HEADER_ETAPE_ACV); - checkFieldIsMappedAndNotBlankInCSVRecord(csvRecord, HEADER_CRITERE); - checkFieldIsMappedInCSVRecord(csvRecord, HEADER_CONSO_ELEC_MOYENNE); - checkFieldIsMappedInCSVRecord(csvRecord, HEADER_VALEUR); - } - - @Override - public ResultatImport<ImpactReseauDTO> importCSV(InputStream csvInputStream) { - ResultatImport<ImpactReseauDTO> resultatImport = new ResultatImport<>(); - List<ImpactReseauDTO> dtos = new ArrayList<>(); - - try (Reader reader = new InputStreamReader(csvInputStream)) { - Iterable<CSVRecord> records = CSVFormat.DEFAULT.builder() - .setHeader() - .setDelimiter(CSV_SEPARATOR) - .setTrim(true) - .setAllowMissingColumnNames(true) - .setSkipHeaderRecord(true) - .build().parse(reader); - records.forEach(csvRecord -> { - try { - checkCSVRecord(csvRecord); - dtos.add(ImpactReseauDTO.builder() - .critere(csvRecord.get(HEADER_CRITERE).trim()) - .refReseau(csvRecord.get(HEADER_REF_RESEAU).trim()) - .consoElecMoyenne(getDoubleValueFromRecord(csvRecord, HEADER_CONSO_ELEC_MOYENNE, null)) - .valeur(getDoubleValueFromRecord(csvRecord, HEADER_VALEUR, null)) - .source(csvRecord.get("source").trim()) - .etapeACV(csvRecord.get(HEADER_ETAPE_ACV).trim()) - .build()); - } catch (Exception e) { - log.error("Erreur prévue lors de la lecture de la ligne {} : {}", csvRecord.getRecordNumber() + 1, e.getMessage()); - resultatImport.getErreurs().add(e.getMessage()); - } - }); - - } catch (Exception e) { - log.error("Erreur de traitement du fichier", e); - - resultatImport.setErreurs(Collections.singletonList("Le fichier CSV n'a pas pu être lu.")); - resultatImport.setNbrLignesImportees(0); - resultatImport.setObjects(null); - return resultatImport; - } - - resultatImport.setObjects(dtos); - resultatImport.setNbrLignesImportees(dtos.size()); - - return resultatImport; - } -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportService.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportService.java deleted file mode 100644 index fe8aabea598e966d7b3377906e1770733f075821..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportService.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.adapter.export; - -import org.apache.commons.csv.CSVPrinter; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportImpactReseauPortImpl; -import org.mte.numecoeval.referentiel.domain.ports.output.ReferentielCsvExportService; -import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.FacteurCaracterisationRepository; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.utils.Constants; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.util.List; - -@Service -public class ImpactReseauCsvExportService extends ReferentielCsvExportService<ImpactReseau> { - private final FacteurCaracterisationRepository repository; - private final FacteurCaracterisationMapper facteurCaracterisationMapper; - private final ImpactReseauMapper reseauMapper; - - public ImpactReseauCsvExportService(FacteurCaracterisationRepository repository, FacteurCaracterisationMapper facteurCaracterisationMapper, ImpactReseauMapper reseauMapper) { - super(ImpactReseau.class); - this.repository = repository; - this.facteurCaracterisationMapper = facteurCaracterisationMapper; - this.reseauMapper = reseauMapper; - - } - - @Override - public String[] getHeaders() { - return ImportImpactReseauPortImpl.getHeaders(); - } - - @Override - public List<ImpactReseau> getObjectsToWrite() { - var facteurCaracterisationList = facteurCaracterisationMapper.toDomains(repository.findByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS)); - return reseauMapper.toImpactReseaux(facteurCaracterisationList); - } - - @Override - protected String getObjectId(ImpactReseau object) { - return String.join("-", object.getRefReseau(), object.getEtape(), object.getCritere()); - } - - @Override - public void printRecord(CSVPrinter csvPrinter, ImpactReseau objectToWrite) throws IOException { - csvPrinter.printRecord( - objectToWrite.getRefReseau(), - objectToWrite.getEtape(), - objectToWrite.getCritere(), - formatDouble(objectToWrite.getValeur()), - formatDouble(objectToWrite.getConsoElecMoyenne()), - objectToWrite.getSource() - ); - } - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/configuration/openapi/ReferentielOpenApiConfig.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/configuration/openapi/ReferentielOpenApiConfig.java index cd928e3953f3a2f67d8169b5d7f99977586c95b7..80d0ed3c169de6c559c09a3ac39cd1bdc5ec478b 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/configuration/openapi/ReferentielOpenApiConfig.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/configuration/openapi/ReferentielOpenApiConfig.java @@ -47,7 +47,6 @@ public class ReferentielOpenApiConfig { "/Hypothèses/**", "/ImpactEquipement/**", "/ImpactMessagerie/**", - "/ImpactReseau/**", "/MixElectrique/**", "/TypeEquipement/**", "/profile/**", diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/CritereJpaAdapter.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/CritereJpaAdapter.java index e92b9a7ae3b10c60a3c724aee25c91ad9198dd81..eae951187eabf6a8190f1466b932a7d63faa40df 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/CritereJpaAdapter.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/CritereJpaAdapter.java @@ -23,7 +23,6 @@ public class CritereJpaAdapter implements ReferentielPersistencePort<Critere, Cr // Pour les purges des données filles ImpactEquipementJpaAdapter impactEquipementJpaAdapter; - ImpactReseauJpaAdapter impactReseauJpaAdapter; MixElectriqueJpaAdapter mixElectriqueJpaAdapter; ImpactMessagerieJpaAdapter impactMessagerieJpaAdapter; diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/EtapeJpaAdapter.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/EtapeJpaAdapter.java index b1aadad62690147b79edb7fa4724c7a7e408a10b..e4bff70d8a878d2c18fd75b647d7ab6031c31a12 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/EtapeJpaAdapter.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/EtapeJpaAdapter.java @@ -23,7 +23,6 @@ public class EtapeJpaAdapter implements ReferentielPersistencePort<Etape, EtapeI EtapeMapper etapeMapper; // Pour les purges des données filles - ImpactReseauJpaAdapter impactReseauJpaAdapter; ImpactEquipementJpaAdapter impactEquipementJpaAdapter; diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/ImpactReseauJpaAdapter.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/ImpactReseauJpaAdapter.java deleted file mode 100644 index 8dad1e2d952e1e19b5a7689c3cb1f67412875f00..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/adapter/ImpactReseauJpaAdapter.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.jpa.adapter; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.model.FacteurCaracterisation; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId; -import org.mte.numecoeval.referentiel.domain.ports.output.ReferentielPersistencePort; -import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.FacteurCaracterisationEntity; -import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.FacteurCaracterisationRepository; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.utils.Constants; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - - -@Service -@Slf4j -@AllArgsConstructor - -public class ImpactReseauJpaAdapter implements ReferentielPersistencePort<ImpactReseau, ImpactReseauId> { - FacteurCaracterisationRepository facteurCaracterisationRepository; - ImpactReseauMapper reseauMapper; - FacteurCaracterisationMapper facteurCaracterisationMapper; - - @Override - public ImpactReseau save(ImpactReseau facteurImpact) throws ReferentielException { - var facteurCaracterisation = reseauMapper.toFacteurCaracterisation(facteurImpact); - var entityToSave = facteurCaracterisationMapper.toEntity(facteurCaracterisation); - if (entityToSave != null) { - facteurCaracterisationRepository.save(entityToSave); - return facteurImpact; - } - return null; - } - - @Override - public void saveAll(Collection<ImpactReseau> facteursImpacts) throws ReferentielException { - List<FacteurCaracterisation> facteurCaracterisationList = reseauMapper.toFacteurCaracterisations(facteursImpacts.stream().toList()); - facteurCaracterisationRepository.saveAll(facteurCaracterisationMapper.toEntities(facteurCaracterisationList)); - } - - - @Override - public ImpactReseau get(ImpactReseauId id) throws ReferentielException { - if (id != null) { - Optional<FacteurCaracterisationEntity> facteurCaracterisationEntities = facteurCaracterisationRepository.findByNomAndEtapeAndCritere(id.getRefReseau(), id.getEtape(), id.getCritere()); - if (facteurCaracterisationEntities.isPresent()) { - return reseauMapper.toImpactReseau(facteurCaracterisationMapper.toDomain(facteurCaracterisationEntities.get())); - } else { - throw new ReferentielException("Référence réseau non trouvée pour l'id " + id); - } - } - throw new ReferentielException("Référence réseau non trouvée pour l'id null"); - } - - @Override - public void purge() { - facteurCaracterisationRepository.deleteByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS); - } - - @Override - public List<ImpactReseau> getAll() { - return reseauMapper.toImpactReseaux(facteurCaracterisationMapper.toDomains(facteurCaracterisationRepository.findByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS))); - } - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java deleted file mode 100644 index 82bd261f1f475e9cfe44d9d7f1e250f1c1670f95..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.mapper; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mte.numecoeval.referentiel.domain.model.FacteurCaracterisation; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactReseauIdDTO; - -import java.util.List; - -@Mapper(componentModel = "spring") - -public interface ImpactReseauMapper { - - @Mapping(source = "etape", target = "etapeACV") - ImpactReseauDTO toDTO(ImpactReseau impactReseau); - - @Mapping(source = "etapeACV", target = "etape") - ImpactReseau toDomain(ImpactReseauDTO impactReseauDTO); - - @Mapping(source = "etapeACV", target = "etape") - ImpactReseauId toDomainId(ImpactReseauIdDTO idImpactReseauDTO); - - List<ImpactReseau> toDomainsFromDTO(List<ImpactReseauDTO> dtos); - - @Mapping(target = "nom", source = "refReseau") - @Mapping(target = "niveau", expression = "java(org.mte.numecoeval.referentiel.utils.Constants.RESEAU_NIVEAU)") - @Mapping(target = "tiers", expression = "java(org.mte.numecoeval.referentiel.utils.Constants.RESEAU_TIERS)") - FacteurCaracterisation toFacteurCaracterisation(ImpactReseau impactReseau); - - List<FacteurCaracterisation> toFacteurCaracterisations(List<ImpactReseau> impactReseaux); - - @Mapping(target = "refReseau", source = "nom") - ImpactReseau toImpactReseau(FacteurCaracterisation facteurCaracterisation); - - List<ImpactReseau> toImpactReseaux(List<FacteurCaracterisation> facteurCaracterisations); -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/critere/ReferentielCritereRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/critere/ReferentielCritereRestApi.java index 5252f4cede833412608eb66e9ea6d7ed82879414..b0e7ceeac38265ef8eae5a80413aaf6380d3b289 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/critere/ReferentielCritereRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/critere/ReferentielCritereRestApi.java @@ -24,13 +24,12 @@ public interface ReferentielCritereRestApi { operationId = "getAllCriteres" ) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "impact reseau trouvé", + @ApiResponse(responseCode = "200", description = "Critères trouvés", content = {@Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = CritereDTO.class)))}), @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseDTO.class))}), - @ApiResponse(responseCode = "404", description = "Impact Reseau non trouvé", content = {@Content(mediaType = "application/json", + @ApiResponse(responseCode = "404", description = "Critères non trouvés", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/criteres", produces = MediaType.APPLICATION_JSON_VALUE) List<CritereDTO> getAll(); - } diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/etape/ReferentielEtapeRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/etape/ReferentielEtapeRestApi.java index 8fc7bcd7fc8713186b8c0fc22b0c2445d47e9cc9..48fafeadd224aa280df940a17211390f31648a23 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/etape/ReferentielEtapeRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/etape/ReferentielEtapeRestApi.java @@ -25,11 +25,11 @@ public interface ReferentielEtapeRestApi { operationId = "getAllEtapes" ) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "etape acv non trouvé", + @ApiResponse(responseCode = "200", description = "Etapes acv trouvées", content = {@Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = EtapeDTO.class)))}), @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseDTO.class))}), - @ApiResponse(responseCode = "404", description = "Impact Reseau non trouvé", content = {@Content(mediaType = "application/json", + @ApiResponse(responseCode = "404", description = "Etapes acv non trouvées", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/etapes", produces = MediaType.APPLICATION_JSON_VALUE) List<EtapeDTO> getAll(); diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/facteurcaracterisation/ReferentielFacteurCaracterisationRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/facteurcaracterisation/ReferentielFacteurCaracterisationRestApi.java index 32bde86c8e5ee8f2b67d5b76126e86434c887a33..28c811cbb8892c9e9e1cfce9be915c74f8d85e62 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/facteurcaracterisation/ReferentielFacteurCaracterisationRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/facteurcaracterisation/ReferentielFacteurCaracterisationRestApi.java @@ -40,15 +40,15 @@ public interface ReferentielFacteurCaracterisationRestApi { schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/facteursCaracterisation", produces = MediaType.APPLICATION_JSON_VALUE) List<FacteurCaracterisationDTO> get( - @RequestParam(required = false) + @RequestParam(value = "critere", required = false) @Schema(description = "Nom du critère d'impact écologique") final String critere, - @RequestParam(required = false) + @RequestParam(value = "etapeacv", required = false) @Schema(description = "Code de l'étape ACV") final String etapeacv, - @RequestParam(required = false) + @RequestParam(value = "nom", required = false) @Schema(description = "Nom du facteur de caractérisation recherché") final String nom, - @RequestParam(required = false) + @RequestParam(value = "localisation", required = false) @Schema(description = "Nom de la localisation") final String localisation, - @RequestParam(required = false) + @RequestParam(value = "categorie", required = false) @Schema(description = "Nom de la catégorie") final String categorie, @RequestParam(value = "nomOrganisation", defaultValue = "") @Schema(description = "Choix de l'organisation pour laquelle on veut exporter des hypothèses, si ce sont des références par défaut, communes à toutes les organisations, laisser le paramètre vide", defaultValue = "") String nomOrganisation diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/hypothese/ReferentielHypotheseRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/hypothese/ReferentielHypotheseRestApi.java index e06b2ac241fdd9430e89c7ca4f2e2a99e30a2028..dd054628e1f45388b6cb5d485e5b7084194984d1 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/hypothese/ReferentielHypotheseRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/hypothese/ReferentielHypotheseRestApi.java @@ -31,7 +31,7 @@ public interface ReferentielHypotheseRestApi { schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/hypothese", produces = MediaType.APPLICATION_JSON_VALUE) HypotheseDTO get( - @RequestParam @Schema(description = "Clé de l'hypothèse") final String cle, + @RequestParam("cle") @Schema(description = "Clé de l'hypothèse") final String cle, @RequestParam(value = "nomOrganisation", defaultValue = "") @Schema(description = "Choix de l'organisation pour laquelle on veut exporter des hypothèses, si ce sont des références par défaut, communes à toutes les organisations, laisser le paramètre vide", defaultValue = "") String nomOrganisation ); diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielAdministrationImpactReseauRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielAdministrationImpactReseauRestApi.java deleted file mode 100644 index 202daa59420b83dab5d7e120d3e6fb66bc37d9f0..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielAdministrationImpactReseauRestApi.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.controller.impactreseau; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import jakarta.servlet.http.HttpServletResponse; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ErrorResponseDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.RapportImportDTO; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; - -public interface ReferentielAdministrationImpactReseauRestApi { - - @Operation( - summary = "Alimentation du référentiel ImpactReseau par csv : annule et remplace.", - description = """ - Le référentiel est global à tout le système. L’import se fait uniquement avec un fichier CSV. - Lors de l’import, les données précédentes sont supprimées. - <ul> - <li>Entrée : Le fichier CSV du référentiel</li> - <li>Sortie : Rapport du fichier CSV (nombre de lignes totales, nombre de lignes en erreur, nombre de lignes traitées, liste des erreurs par lignes).</li> - </ul> - """, - tags = {"Administration détaillée"}, - hidden = true - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "impact reseau trouvé", - content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ImpactReseauDTO.class))}), - @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))}), - @ApiResponse(responseCode = "404", description = "Impact Réseau non trouvé", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))})}) - @PostMapping(path = "/referentiel/impactreseaux", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity<ImpactReseauDTO> add(@RequestBody final ImpactReseauDTO impactReseauDTO) throws ReferentielException; - - @Operation( - summary = "Exposition ressource update Impact Reseau ", - tags = {"Administration détaillée"}, hidden = true - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Modication d'un impact reseau : les champs refReseau, critere & etapeACV ne peuvent pas être modifié", - content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ImpactReseauDTO.class))}), - @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))}), - @ApiResponse(responseCode = "404", description = "Impact Réseau non trouvé", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))})}) - @PutMapping(path = "/referentiel/impactreseaux", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity<ImpactReseauDTO> update(@RequestBody final ImpactReseauDTO impactReseauDTO) throws ReferentielException; - - - @Operation( - summary = "Alimentation du référentiel ImpactReseau par csv : annule et remplace.", - description = """ - Le référentiel est global à tout le système. L’import se fait uniquement avec un fichier CSV. - Lors de l’import, les données précédentes sont supprimées. - <ul> - <li>Entrée : Le fichier CSV du référentiel</li> - <li>Sortie : Rapport du fichier CSV (nombre de lignes totales, nombre de lignes en erreur, nombre de lignes traitées, liste des erreurs par lignes).</li> - </ul> - """, - tags = {"Import Référentiels"}, - operationId = "importImpactReseauxCSV" - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Rapport d'import du fichier CSV"), - @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))})}) - @PostMapping(path = "/referentiel/impactreseaux/csv", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - RapportImportDTO importCSV(@RequestPart("file") MultipartFile file) throws IOException, ReferentielException; - - - @Operation( - summary = "Exporter les impacts réseaux sous format csv", - description = """ - <ul> - <li>Entrée : Aucune </li> - <li>Sortie : Renvoie la liste des étapes de ref_ImpactReseau </li> - </ul> - """, - tags = {"Export Référentiels"}, - operationId = "exportImpactReseauxCSV" - ) - @GetMapping("/referentiel/impactreseaux/csv") - void exportCSV(HttpServletResponse servletResponse) throws IOException; - - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApi.java deleted file mode 100644 index 3f65700204f4caffba28e3415d97eca3d549ebe5..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApi.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.controller.impactreseau; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ErrorResponseDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -public interface ReferentielImpactReseauRestApi { - - @Operation(summary = "Endpoint interne à NumEcoEval - Récupération d'un Impact Réseau", - description = """ - Endpoint interne utilisé dans la génération des indicateurs par le module api-calcul de NumEcoEval. - Récupération d'un impact écologique vis à vis de l'usage du réseau en fonction de 3 paramètres: - <ul> - <li>La référence d'impact réseau: refReseau</li> - <li>Le critère d'impact: critere</li> - <li>L'étape ACV: etapeACV</li> - </ul> - . - """, - tags = "Interne NumEcoEval", - operationId = "getImpactReseau") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "impact reseau trouvé", - content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ImpactReseauDTO.class))}), - @ApiResponse(responseCode = "400", description = "Invalid request", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))}), - @ApiResponse(responseCode = "404", description = "Impact Reseau non trouvé", content = {@Content(mediaType = "application/json", - schema = @Schema(implementation = ErrorResponseDTO.class))})}) - @GetMapping(path = "/referentiel/impactreseaux", produces = MediaType.APPLICATION_JSON_VALUE) - ImpactReseauDTO get( - @RequestParam - @Schema(description = "Référence de réseau recherché") final String refReseau, - @RequestParam - @Schema(description = "Nom du critère d'impact écologique") final String critere, - @RequestParam - @Schema(description = "Code de l'étape ACV") final String etapeacv - ); - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImpl.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImpl.java deleted file mode 100644 index ec44f8a61f4f25589bd5be72973b554c5a6e302d..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.controller.impactreseau; - -import jakarta.servlet.http.HttpServletResponse; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportImpactReseauPortImpl; -import org.mte.numecoeval.referentiel.infrastructure.adapter.export.ImpactReseauCsvExportService; -import org.mte.numecoeval.referentiel.infrastructure.restapi.controller.BaseExportReferentiel; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.RapportImportDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactReseauIdDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.facade.ImpactReseauFacade; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.server.ResponseStatusException; - -import java.io.IOException; -import java.util.Objects; - -@RestController -@Slf4j -@AllArgsConstructor -public class ReferentielImpactReseauRestApiImpl implements BaseExportReferentiel<ImpactReseau>, ReferentielImpactReseauRestApi, ReferentielAdministrationImpactReseauRestApi { - private ImpactReseauFacade referentielFacade; - - private ImpactReseauCsvExportService csvExportService; - - - @SneakyThrows - @Override - public ImpactReseauDTO get(String refReseau, String critere, String etapeacv) { - ImpactReseauIdDTO idImpactReseauDTO = ImpactReseauIdDTO.builder() - .critere(critere) - .etapeACV(etapeacv) - .refReseau(refReseau).build(); - return referentielFacade.get(idImpactReseauDTO); - } - - - @Override - public ResponseEntity<ImpactReseauDTO> add(ImpactReseauDTO impactReseauDTO) throws ReferentielException { - if (Objects.isNull(impactReseauDTO)) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Le corps de la requête ne peut être null"); - } - if (StringUtils.isBlank(impactReseauDTO.getSource())) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "La source est obligatoire"); - } - return ResponseEntity.ok().body(referentielFacade.addOrUpdate(impactReseauDTO)); - } - - @Override - @PutMapping(path = "/referentiel/impactreseaux", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity<ImpactReseauDTO> update(ImpactReseauDTO impactReseauDTO) throws ReferentielException { - if (Objects.isNull(impactReseauDTO)) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Le corps de la requête ne peut être null"); - } - if (StringUtils.isBlank(impactReseauDTO.getSource())) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "La source est obligatoire"); - } - return ResponseEntity.ok().body(referentielFacade.addOrUpdate(impactReseauDTO)); - } - - @Override - @PostMapping(path = "/referentiel/impactreseaux/csv", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public RapportImportDTO importCSV(MultipartFile fichier) throws IOException, ReferentielException { - if (fichier == null || fichier.isEmpty()) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Le fichier n'existe pas ou alors il est vide"); - } - var rapportImport = new ImportImpactReseauPortImpl().importCSV(fichier.getInputStream()); - referentielFacade.purgeAndAddAll(rapportImport.getObjects()); - - return new RapportImportDTO( - fichier.getOriginalFilename(), - rapportImport.getErreurs(), - rapportImport.getNbrLignesImportees() - ); - } - - @Override - public void exportCSV(HttpServletResponse servletResponse) throws IOException { - exportCSV(servletResponse, csvExportService, "impactReseaux"); - } - -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/mixelectrique/ReferentielMixElectriqueRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/mixelectrique/ReferentielMixElectriqueRestApi.java index d29e7e28226f980ac30bfd80f0b30d1701a8aad6..d59b2a6e9ebec45f9b3dc7fe29762334a7250da6 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/mixelectrique/ReferentielMixElectriqueRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/mixelectrique/ReferentielMixElectriqueRestApi.java @@ -64,7 +64,7 @@ public interface ReferentielMixElectriqueRestApi { schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/mixelecs/{pays}", produces = MediaType.APPLICATION_JSON_VALUE) List<MixElectriqueDTO> get( - @PathVariable + @PathVariable("pays") @Schema(description = "Pays recherché") final String pays ); } diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeequipement/ReferentielTypeEquipementRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeequipement/ReferentielTypeEquipementRestApi.java index 07a9ebec051523a9fc841c121442801f1a09d7d7..1866836d605368a2bac0b6734111b61002b94a6b 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeequipement/ReferentielTypeEquipementRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeequipement/ReferentielTypeEquipementRestApi.java @@ -59,5 +59,5 @@ public interface ReferentielTypeEquipementRestApi { @ApiResponse(responseCode = "404", description = "Types Equipement non trouvé", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/typesEquipement/{type}", produces = MediaType.APPLICATION_JSON_VALUE) - TypeEquipementDTO getTypeEquipement(@PathVariable @Schema(description = "type recherché") String type) throws ReferentielException; + TypeEquipementDTO getTypeEquipement(@PathVariable("type") @Schema(description = "type recherché") String type) throws ReferentielException; } diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeitem/ReferentielTypeItemRestApi.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeitem/ReferentielTypeItemRestApi.java index 29d75281f79b6c3d3b5d373387b9f39c91a0972e..0e4efbf578ab118ec421eafd05824bfe5c27f583 100644 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeitem/ReferentielTypeItemRestApi.java +++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/typeitem/ReferentielTypeItemRestApi.java @@ -61,7 +61,7 @@ public interface ReferentielTypeItemRestApi { schema = @Schema(implementation = ErrorResponseDTO.class))})}) @GetMapping(path = "/referentiel/typesItem/{type}", produces = MediaType.APPLICATION_JSON_VALUE) TypeItemDTO getTypeItem( - @PathVariable @Schema(description = "type recherché") String type, + @PathVariable("type") @Schema(description = "type recherché") String type, @RequestParam(value = "nomOrganisation", defaultValue = "") @Schema(description = "Choix de l'organisation pour laquelle on veut exporter des hypothèses, si ce sont des références par défaut, communes à toutes les organisations, laisser le paramètre vide", defaultValue = "") String nomOrganisation ) throws ReferentielException; diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/ImpactReseauDTO.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/ImpactReseauDTO.java deleted file mode 100644 index a6ea17bb8dd2a8db2d8102b7c964f9d6d0381577..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/ImpactReseauDTO.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.dto; - - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import lombok.experimental.FieldDefaults; - -import java.io.Serializable; - -@Setter -@Getter -@AllArgsConstructor -@NoArgsConstructor -@Builder -@FieldDefaults(level = AccessLevel.PRIVATE) -@EqualsAndHashCode -@Schema( - description = "Référentiel de l'impact écologique d'un équipement physique vis à vis de l'usage du réseau dans les référentiels. La clé est composé des champs refReseau, etapeACV et critere." -) -public class ImpactReseauDTO implements Serializable { - @Schema( - description = "Référence de l'usage du réseau, fait partie de la clé du référentiel" - ) - @JsonProperty("refReseau") - String refReseau; - @Schema( - description = "Étape ACV concerné pour l'usage du réseau, fait partie de la clé du référentiel" - ) - @JsonProperty("etapeACV") - String etapeACV; - @Schema( - description = "Critère d'impact écologique concerné pour l'usage du réseau, fait partie de la clé du référentiel" - ) - @JsonProperty("critere") - String critere; - @Schema( - description = "Unité de l'impact écologique concerné pour l'usage du réseau. Champ Déprécié", - deprecated = true - ) - @JsonProperty("unite") - String unite; - @Schema( - description = "Source de l'impact écologique" - ) - @JsonProperty("source") - String source; - @Schema( - description = "Valeur de l'impact écologique" - ) - @JsonProperty("valeur") - Double valeur; - @Schema( - description = "Consommation électrique moyenne de l'impact écologique" - ) - @JsonProperty("consoElecMoyenne") - Double consoElecMoyenne; -} \ No newline at end of file diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/id/ImpactReseauIdDTO.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/id/ImpactReseauIdDTO.java deleted file mode 100644 index 0fc29e59a8706121c9139374a46a3f2633ce9abf..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/dto/id/ImpactReseauIdDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.FieldDefaults; - -import java.io.Serializable; - -@Setter -@Getter -@AllArgsConstructor -@NoArgsConstructor -@Builder -@FieldDefaults(level = AccessLevel.PRIVATE) -@EqualsAndHashCode -public class ImpactReseauIdDTO implements Serializable { - @JsonProperty("refReseau") - String refReseau; - @JsonProperty("etapeACV") - String etapeACV; - @JsonProperty("critere") - String critere; -} diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacade.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacade.java deleted file mode 100644 index 2c28678300113accb73d0496a54373c35ab8de8f..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacade.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.facade; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId; -import org.mte.numecoeval.referentiel.domain.ports.output.ReferentielPersistencePort; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactReseauIdDTO; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@Slf4j -@AllArgsConstructor -public class ImpactReseauFacade { - - private ReferentielPersistencePort<ImpactReseau, ImpactReseauId> persistencePort; - - private ImpactReseauMapper mapper; - - public ImpactReseauDTO get(ImpactReseauIdDTO idImpactReseauDTO) throws ReferentielException { - ImpactReseau impactReseau = persistencePort.get(mapper.toDomainId(idImpactReseauDTO)); - return mapper.toDTO(impactReseau); - } - - public ImpactReseauDTO addOrUpdate(ImpactReseauDTO impactReseauDTO) throws ReferentielException { - ImpactReseau save = persistencePort.save(mapper.toDomain(impactReseauDTO)); - return mapper.toDTO(save); - } - - public void purgeAndAddAll(List<ImpactReseauDTO> impactesReseaux) throws ReferentielException { - persistencePort.purge(); - List<ImpactReseau> impactReseauList = mapper.toDomainsFromDTO(impactesReseaux); - persistencePort.saveAll(impactReseauList); - } -} diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/domain/port/input/ImportImpactReseauPortTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/domain/port/input/ImportImpactReseauPortTest.java deleted file mode 100644 index 8607e23d72143f8023183d040a95b0be5fc562db..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/domain/port/input/ImportImpactReseauPortTest.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.mte.numecoeval.referentiel.domain.port.input; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.Test; -import org.mte.numecoeval.referentiel.domain.ports.input.ImportCSVReferentielPort; -import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportImpactReseauPortImpl; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.springframework.util.ResourceUtils; - -import java.io.*; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.*; - -class ImportImpactReseauPortTest { - - ImportCSVReferentielPort<ImpactReseauDTO> importPortToTest = new ImportImpactReseauPortImpl(); - - @Test - void importCSV_shouldImportAllDatas() throws Exception { - File file = ResourceUtils.getFile("classpath:csv/unit/impactreseau.csv"); - var resultatImport = importPortToTest.importCSV(new FileInputStream(file)); - - assertEquals(4, resultatImport.getNbrLignesImportees()); - assertEquals(0, resultatImport.getErreurs().size()); - assertEquals(4, resultatImport.getObjects().size()); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "DISTRIBUTION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(1.428).equals(dto.getValeur()) - && Double.valueOf(0.0020).equals(dto.getConsoElecMoyenne()) - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "FABRICATION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(518.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "FIN_DE_VIE".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(64.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "UTILISATION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(76.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - } - - @Test - void importCSV_whenErrorInMiddleOfFile_shouldImportDatasWithErrors() throws Exception { - File file = ResourceUtils.getFile("classpath:csv/unit/impactreseau_errorInMiddle.csv"); - var resultatImport = importPortToTest.importCSV(new FileInputStream(file)); - - assertEquals(4, resultatImport.getNbrLignesImportees()); - assertEquals(3, resultatImport.getErreurs().size()); - assertTrue(resultatImport.getErreurs().stream().anyMatch("La ligne n°4 est invalide : La colonne refReseau ne peut être vide"::equals)); - assertTrue(resultatImport.getErreurs().stream().anyMatch("La ligne n°5 est invalide : La colonne etapeACV ne peut être vide"::equals)); - assertTrue(resultatImport.getErreurs().stream().anyMatch("La ligne n°6 est invalide : La colonne critere ne peut être vide"::equals)); - assertEquals(4, resultatImport.getObjects().size()); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "DISTRIBUTION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(1.428).equals(dto.getValeur()) - && Double.valueOf(0.0020).equals(dto.getConsoElecMoyenne()) - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "FABRICATION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(518.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "FIN_DE_VIE".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(64.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - assertTrue(resultatImport.getObjects().stream().anyMatch(dto -> - "impactReseauMobileMoyen".equals(dto.getRefReseau()) - && "UTILISATION".equals(dto.getEtapeACV()) - && "Changement climatique".equals(dto.getCritere()) - && Double.valueOf(76.28).equals(dto.getValeur()) - && StringUtils.isEmpty(dto.getUnite()) - && dto.getConsoElecMoyenne() == null - && "RefTest V1.00".equals(dto.getSource())) - ); - } - - @Test - void importCSV_whenWrongFile_shouldReturnOnlyErrors() throws Exception { - File file = ResourceUtils.getFile("classpath:csv/unit/wrongCSVFile.csv"); - var resultatImport = importPortToTest.importCSV(new FileInputStream(file)); - - assertEquals(0, resultatImport.getNbrLignesImportees()); - assertEquals(1, resultatImport.getErreurs().size()); - assertTrue(resultatImport.getErreurs().stream().anyMatch("La ligne n°2 est invalide : Entêtes incohérentes"::equals)); - } - - @Test - void importCSV_whenStreamAlreadyClosedShouldReturnReportWithOneError() throws IOException { - DataInputStream dataInputStream = mock(DataInputStream.class); - doNothing().when(dataInputStream).close(); - - var resultatImport = importPortToTest.importCSV(dataInputStream); - - verify(dataInputStream).close(); - assertEquals(0, resultatImport.getNbrLignesImportees()); - assertEquals(1, resultatImport.getErreurs().size()); - assertEquals("Le fichier CSV n'a pas pu être lu.", resultatImport.getErreurs().get(0)); - } - - @Test - void importCSV_whenFileNotFoundShouldReturnReportWithOneError() throws IOException { - DataInputStream dataInputStream = mock(DataInputStream.class); - doThrow(new FileNotFoundException("start Read csv etape")).when(dataInputStream).close(); - - var resultatImport = importPortToTest.importCSV(dataInputStream); - - verify(dataInputStream).close(); - assertEquals(0, resultatImport.getNbrLignesImportees()); - assertEquals(1, resultatImport.getErreurs().size()); - assertEquals("Le fichier CSV n'a pas pu être lu.", resultatImport.getErreurs().get(0)); - } -} diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java index dd873193f8ac949873fd84cb8903f4304936b966..d9e446cff5031b67e8bc497a354eb043ebdb3193 100644 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java +++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java @@ -352,49 +352,6 @@ public class TestDataFactory { .setCritere(critereId) .setNomOrganisation(nomOrganisation); } - - - } - - public static class ImpactReseauFactory { - - public static ImpactReseauDTO dto(EtapeDTO etape, CritereDTO critere, String refReseau, String source, Double valeur, Double consoElecMoyenne) { - return new ImpactReseauDTO( - refReseau, - etape.getCode(), - critere.getNomCritere(), - null, - source, - valeur, - consoElecMoyenne - ); - } - - public static ImpactReseau domain(Etape etape, Critere critere, String refReseau, String source, Double valeur, Double consoElecMoyenne) { - return new ImpactReseau() - .setEtape(etape.getCode()) - .setCritere(critere.getNomCritere()) - .setRefReseau(refReseau) - .setSource(source) - .setValeur(valeur) - .setConsoElecMoyenne(consoElecMoyenne); - } - - public static ImpactReseauIdDTO idDTO(EtapeIdDTO etapeIdDTO, CritereIdDTO critereId, String refReseau) { - return ImpactReseauIdDTO - .builder() - .etapeACV(etapeIdDTO.getCode()) - .critere(critereId.getNomCritere()) - .refReseau(refReseau) - .build(); - } - - public static ImpactReseauId idDomain(EtapeId etapeId, CritereId critereId, String refReseau) { - return new ImpactReseauId() - .setEtape(etapeId.getCode()) - .setCritere(critereId.getNomCritere()) - .setRefReseau(refReseau); - } } public static class ImpactMessagerieFactory { diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java deleted file mode 100644 index ca527e3a573899dd052a6f28bb16fb1f7994df0e..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.adapter.export; - -import org.apache.commons.csv.CSVPrinter; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportImpactReseauPortImpl; -import org.mte.numecoeval.referentiel.factory.TestDataFactory; -import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.FacteurCaracterisationEntity; -import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.FacteurCaracterisationRepository; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapperImpl; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapperImpl; -import org.mte.numecoeval.referentiel.utils.Constants; -import org.springframework.test.util.ReflectionTestUtils; - -import java.io.IOException; -import java.io.StringWriter; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.List; -import java.util.Locale; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; - -class ImpactReseauCsvExportServiceTest { - - @InjectMocks - ImpactReseauCsvExportService exportService; - - @Mock - FacteurCaracterisationRepository repository; - FacteurCaracterisationMapper facteurCaracterisationMapper = new FacteurCaracterisationMapperImpl(); - ImpactReseauMapper reseauMapper = new ImpactReseauMapperImpl(); - @Mock - CSVPrinter csvPrinter; - - @BeforeEach - void setup() { - MockitoAnnotations.openMocks(this); - ReflectionTestUtils.setField(exportService, "facteurCaracterisationMapper", facteurCaracterisationMapper); - ReflectionTestUtils.setField(exportService, "reseauMapper", reseauMapper); - } - - private List<FacteurCaracterisationEntity> facteurCaracterisationEntities() { - return List.of( - TestDataFactory.FacteurCaracterisationFactory.entity("Fixed-line network", - TestDataFactory.EtapeFactory.entity("UTILISATION", ""), - TestDataFactory.CritereFactory.entity("Changement climatique", "", ""), - "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.1, "", 0.2, "", "NegaOctet", "ADEO" - ), - TestDataFactory.FacteurCaracterisationFactory.entity("Mobile network", - TestDataFactory.EtapeFactory.entity("DISTRIBUTION", ""), - TestDataFactory.CritereFactory.entity("Changement climatique", "", ""), - "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.01, "", 0.002, "", "", "ADEO" - ) - ); - } - - - @Test - void getHeadersShouldReturnSameHeadersAsImport() { - assertEquals(ImportImpactReseauPortImpl.getHeaders(), exportService.getHeaders()); - } - - @Test - void getObjectsToWriteShouldReturnRepositoryFindAll() { - var entities = facteurCaracterisationEntities(); - when(repository.findByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS)).thenReturn(entities); - - var actual = exportService.getObjectsToWrite(); - assertEquals(2, actual.size()); - assertEquals("DISTRIBUTION,UTILISATION", actual.stream().map(ImpactReseau::getEtape).sorted().collect(Collectors.joining(","))); - } - - @Test - void printRecordShouldUseEntityAttributes() throws IOException { - var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Fixed-line network", - TestDataFactory.EtapeFactory.entity("UTILISATION", ""), - TestDataFactory.CritereFactory.entity("Changement climatique", "", ""), - "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.1, "", 0.2, "", "NegaOctet", "ADEO" - ); - - DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); - df.setMaximumFractionDigits(340); - - assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, reseauMapper.toImpactReseau(facteurCaracterisationMapper.toDomain(entity)))); - - Mockito.verify(csvPrinter, times(1)).printRecord(entity.getNom(), - entity.getEtape(), entity.getCritere(), - df.format(entity.getValeur()), df.format(entity.getConsoElecMoyenne()), - entity.getSource()); - } - - @Test - void logRecordErrorShouldLogSpecificErrorForRecord() { - var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Fixed-line network", - TestDataFactory.EtapeFactory.entity("UTILISATION", ""), - TestDataFactory.CritereFactory.entity("Changement climatique", "", ""), - "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.1, "", 0.2, "", "NegaOctet", "ADEO" - ); - - assertDoesNotThrow(() -> exportService.logRecordError(reseauMapper.toImpactReseau(facteurCaracterisationMapper.toDomain(entity)), new Exception("Test"))); - } - - @Test - void logRecordErrorShouldLogGenericErrorForRecord() { - assertDoesNotThrow(() -> exportService.logRecordError(null, new Exception("Test"))); - } - - @Test - void logRecordErrorShouldLogGenericErrorForFile() { - assertDoesNotThrow(() -> exportService.logWriterError(new Exception("Test"))); - } - - @Test - void writeToCsvShouldReturnCSV() { - // given - var entities = facteurCaracterisationEntities(); - when(repository.findByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS)).thenReturn(entities); - StringWriter stringWriter = new StringWriter(); - - // when - exportService.writeToCsv(stringWriter); - - // Then - String result = stringWriter.toString(); - assertEquals( - "refReseau;etapeACV;critere;valeur;consoElecMoyenne;source\r\n" + - "Fixed-line network;UTILISATION;Changement climatique;0.2;0.1;NegaOctet\r\n" + - "Mobile network;DISTRIBUTION;Changement climatique;0.002;0.01;\r\n", - result - ); - } - - -} diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/CritereJpaAdapterTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/CritereJpaAdapterTest.java index 90267150d9e703c2237e40699f1583a8ab3dfa87..712ed68fa373a207f08d538fb662547531ad9dae 100644 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/CritereJpaAdapterTest.java +++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/CritereJpaAdapterTest.java @@ -8,7 +8,6 @@ import org.mte.numecoeval.referentiel.domain.model.id.CritereId; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.CritereJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactEquipementJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactMessagerieJpaAdapter; -import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactReseauJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.MixElectriqueJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.CritereEntity; import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.CritereRepository; @@ -40,9 +39,6 @@ class CritereJpaAdapterTest { @MockBean private ImpactEquipementJpaAdapter impactEquipementJpaAdapter; - @MockBean - private ImpactReseauJpaAdapter impactReseauJpaAdapter; - @MockBean private MixElectriqueJpaAdapter mixElectriqueJpaAdapter; @@ -135,7 +131,6 @@ class CritereJpaAdapterTest { */ @Test void testPurge() { - doNothing().when(impactReseauJpaAdapter).purge(); doNothing().when(impactEquipementJpaAdapter).purge(); doNothing().when(mixElectriqueJpaAdapter).purge(); doNothing().when(impactMessagerieJpaAdapter).purge(); @@ -143,7 +138,6 @@ class CritereJpaAdapterTest { critereJpaAdapter.purge(); // Purge des données filles - verify(impactReseauJpaAdapter, times(0)).purge(); verify(impactEquipementJpaAdapter, times(0)).purge(); verify(mixElectriqueJpaAdapter, times(0)).purge(); verify(impactMessagerieJpaAdapter, times(0)).purge(); diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/EtapeJpaAdapterTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/EtapeJpaAdapterTest.java index 42201c320fd809990a90de0e346429e687bcafc1..fa0cd8208a5699ad58d826936ab75e43b0710767 100644 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/EtapeJpaAdapterTest.java +++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/EtapeJpaAdapterTest.java @@ -7,7 +7,6 @@ import org.mte.numecoeval.referentiel.domain.model.Etape; import org.mte.numecoeval.referentiel.domain.model.id.EtapeId; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.EtapeJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactEquipementJpaAdapter; -import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactReseauJpaAdapter; import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.EtapeEntity; import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.EtapeRepository; import org.mte.numecoeval.referentiel.infrastructure.mapper.EtapeMapper; @@ -34,10 +33,6 @@ class EtapeJpaAdapterTest { @MockBean private EtapeRepository etapeRepository; - - // Pour les purges des données filles - @MockBean - ImpactReseauJpaAdapter impactReseauJpaAdapter; @MockBean ImpactEquipementJpaAdapter impactEquipementJpaAdapter; @@ -116,14 +111,12 @@ class EtapeJpaAdapterTest { */ @Test void testPurge() { - doNothing().when(impactReseauJpaAdapter).purge(); doNothing().when(impactEquipementJpaAdapter).purge(); doNothing().when(etapeRepository).deleteAll(); etapeJpaAdapter.purge(); // Purge des données filles - verify(impactReseauJpaAdapter, times(0)).purge(); verify(impactEquipementJpaAdapter, times(0)).purge(); verify(etapeRepository).deleteAll(); assertTrue(etapeJpaAdapter.getAll().isEmpty()); diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/ImpactReseauJpaAdapterTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/ImpactReseauJpaAdapterTest.java deleted file mode 100644 index 3989ea4d167eee296eaf59ca87000040f0afb181..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/jpa/ImpactReseauJpaAdapterTest.java +++ /dev/null @@ -1,164 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.jpa; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId; -import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactReseauJpaAdapter; -import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.FacteurCaracterisationEntity; -import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.FacteurCaracterisationRepository; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapperImpl; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapperImpl; -import org.mte.numecoeval.referentiel.utils.Constants; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Collections; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; - -class ImpactReseauJpaAdapterTest { - - @InjectMocks - private ImpactReseauJpaAdapter jpaAdapter; - - @Mock - FacteurCaracterisationRepository repository; - FacteurCaracterisationMapper facteurCaracterisationMapper = new FacteurCaracterisationMapperImpl(); - ImpactReseauMapper mapper = new ImpactReseauMapperImpl(); - - private static final String CRITERE = "Changement climatique"; - private static final String ETAPE = "UTILISATION"; - private static final String NOM = "Mobile network"; - - - @BeforeEach - void setup() { - MockitoAnnotations.openMocks(this); - ReflectionTestUtils.setField(jpaAdapter, "reseauMapper", mapper); - ReflectionTestUtils.setField(jpaAdapter, "facteurCaracterisationMapper", facteurCaracterisationMapper); - } - - private FacteurCaracterisationEntity facteurCaracterisationEntity() { - return new FacteurCaracterisationEntity() - .setNom(NOM) - .setEtape(ETAPE) - .setCritere(CRITERE) - .setNiveau(Constants.RESEAU_NIVEAU) - .setTiers(Constants.RESEAU_TIERS) - .setSource("Test") - .setConsoElecMoyenne(0.020) - .setValeur(0.120); - } - - private ImpactReseau impactReseau() { - return new ImpactReseau() - .setRefReseau(NOM) - .setEtape(ETAPE) - .setCritere(CRITERE) - .setSource("Test") - .setConsoElecMoyenne(0.020) - .setValeur(0.120); - } - - @Test - void get_shouldReturnDomain() { - var expectedEntity = facteurCaracterisationEntity(); - - var wantedId = new ImpactReseauId() - .setRefReseau(NOM) - .setEtape(ETAPE) - .setCritere(CRITERE); - - Mockito.when(repository.findByNomAndEtapeAndCritere(wantedId.getRefReseau(), wantedId.getEtape(), wantedId.getCritere())).thenReturn(Optional.of(expectedEntity)); - - var actualDomain = assertDoesNotThrow(() -> jpaAdapter.get(wantedId)); - - assertNotNull(actualDomain.getEtape()); - assertEquals(expectedEntity.getEtape(), actualDomain.getEtape()); - assertNotNull(actualDomain.getCritere()); - assertEquals(expectedEntity.getCritere(), actualDomain.getCritere()); - assertEquals(expectedEntity.getNom(), actualDomain.getRefReseau()); - assertEquals(expectedEntity.getConsoElecMoyenne(), actualDomain.getConsoElecMoyenne()); - assertEquals(expectedEntity.getValeur(), actualDomain.getValeur()); - assertEquals(expectedEntity.getSource(), actualDomain.getSource()); - } - - - @Test - void get_shouldThrowException() { - var wantedId = new ImpactReseauId() - .setRefReseau("NonExistant") - .setEtape("Absent") - .setCritere("Inexistant"); - - Mockito.when(repository.findByNomAndEtapeAndCritere(wantedId.getRefReseau(), wantedId.getEtape(), wantedId.getCritere())).thenReturn(Optional.empty()); - ReferentielException expectedException = assertThrows(ReferentielException.class, () -> jpaAdapter.get(wantedId)); - assertEquals("Référence réseau non trouvée pour l'id ImpactReseauId(refReseau=NonExistant, etape=Absent, critere=Inexistant)", expectedException.getMessage()); - } - - - @Test - void get_whenNull_shouldThrowException() { - ReferentielException expectedException = assertThrows(ReferentielException.class, () -> jpaAdapter.get(null)); - assertEquals("Référence réseau non trouvée pour l'id null", expectedException.getMessage()); - } - - @Test - void purge_shouldCallDeleteAll() { - jpaAdapter.purge(); - Mockito.verify(repository, Mockito.times(1)).deleteByNiveauAndTiers(Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS); - } - - @Test - void getAll_shouldCallfindAll() { - jpaAdapter.getAll(); - Mockito.verify(repository, Mockito.times(1)).findByNiveauAndTiers(any(), any()); - } - - @Test - void saveAll_shouldCallsaveAll() { - var domainToSave = impactReseau(); - var entitiesToSave = facteurCaracterisationMapper.toEntities(mapper.toFacteurCaracterisations(Collections.singletonList(domainToSave))); - - assertDoesNotThrow(() -> jpaAdapter.saveAll(Collections.singletonList(domainToSave))); - Mockito.verify(repository).saveAll(entitiesToSave); - Mockito.verify(repository, Mockito.times(1)).saveAll(entitiesToSave); - } - - @Test - void save_shouldSaveAndReturnDomain() { - var domain = impactReseau(); - var actualEntity = facteurCaracterisationMapper.toEntity(mapper.toFacteurCaracterisation(domain)); - var expectedEntity = facteurCaracterisationEntity(); - - assertEquals(expectedEntity.getNom(), actualEntity.getNom()); - assertEquals(expectedEntity.getNiveau(), actualEntity.getNiveau()); - assertEquals(expectedEntity.getTiers(), actualEntity.getTiers()); - - Mockito.when(repository.save(actualEntity)).thenReturn(actualEntity); - - assertDoesNotThrow(() -> jpaAdapter.save(domain)); - Mockito.verify(repository).save(actualEntity); - } - - @ParameterizedTest - @NullSource - void save_shouldSaveAndReturnNull(ImpactReseau nullValue) { - var expectedDomain = assertDoesNotThrow(() -> jpaAdapter.save(nullValue)); - Assertions.assertNull(expectedDomain); - } - - -} diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImplTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImplTest.java deleted file mode 100644 index d9016bfe312de57626be5e16ca78ccdce564a6b8..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/controller/impactreseau/ReferentielImpactReseauRestApiImplTest.java +++ /dev/null @@ -1,180 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.controller.impactreseau; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.infrastructure.adapter.export.ImpactReseauCsvExportService; -import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactReseauIdDTO; -import org.mte.numecoeval.referentiel.infrastructure.restapi.facade.ImpactReseauFacade; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.web.server.ResponseStatusException; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ContextConfiguration(classes = {ReferentielImpactReseauRestApiImpl.class}) -@ExtendWith(SpringExtension.class) -class ReferentielImpactReseauRestApiImplTest { - @MockBean - private ImpactReseauFacade referentielFacade; - - @MockBean - private ImpactReseauCsvExportService csvExportService; - - @Autowired - private ReferentielImpactReseauRestApiImpl referentielRestApi; - - @Test - void get_shouldCallFacadeGetAndReturnMatchingDTO() throws ReferentielException { - String refReseau = "ImpactReseauMobileMoyen"; - String nomCritere = "Changement Climatique"; - String codeEtapeACV = "UTILISATION"; - var idDTO = ImpactReseauIdDTO.builder() - .refReseau(refReseau) - .etapeACV(codeEtapeACV) - .critere(nomCritere) - .build(); - var expectedDTO = ImpactReseauDTO.builder() - .etapeACV(codeEtapeACV) - .critere(nomCritere) - .refReseau(refReseau) - .source("Test") - .valeur(1.0).build(); - - when(referentielFacade.get(idDTO)).thenReturn(expectedDTO); - - var receivedDTO = referentielRestApi.get(refReseau, nomCritere, codeEtapeACV); - assertSame(receivedDTO, receivedDTO); - verify(referentielFacade).get(idDTO); - } - - @Test - void get_whenNotFound_thenShouldThrowReferentielException() throws ReferentielException { - String refReseau = "ImpactReseauMobileMoyen"; - String nomCritere = "Changement Climatique"; - String codeEtapeACV = "UTILISATION"; - var idDTO = ImpactReseauIdDTO.builder() - .refReseau(refReseau) - .etapeACV(codeEtapeACV) - .critere(nomCritere) - .build(); - - when(referentielFacade.get(idDTO)).thenThrow(new ReferentielException("Impact Réseau non trouvé")); - var exception = assertThrows(ReferentielException.class,() -> referentielRestApi.get(refReseau, nomCritere, codeEtapeACV)); - assertEquals("Impact Réseau non trouvé", exception.getMessage()); - } - - @Test - void add_shouldCallFacadeAddOrUpdate() throws ReferentielException { - ImpactReseauDTO impactReseauDTO = new ImpactReseauDTO("ImpactReseauMobileMoyen", "UTILISATION", - "Changement Climatique", "kg CO² eq", "La source est obligatoire", 10.0d, 10.0d); - when(referentielFacade.addOrUpdate(any())).thenReturn(impactReseauDTO); - - ResponseEntity<ImpactReseauDTO> actualAddResult = referentielRestApi.add(impactReseauDTO); - - assertTrue(actualAddResult.hasBody()); - assertTrue(actualAddResult.getHeaders().isEmpty()); - assertEquals(HttpStatus.OK, actualAddResult.getStatusCode()); - assertEquals(impactReseauDTO, actualAddResult.getBody()); - verify(referentielFacade).addOrUpdate(any()); - } - - @Test - void add_whenEmptySource_shouldThrowBadRequestException() { - ImpactReseauDTO impactReseauDTO = new ImpactReseauDTO("ImpactReseauMobileMoyen", "UTILISATION", - "Changement Climatique", "kg CO² eq", null, 10.0d, 10.0d); - - var exception = assertThrows(ResponseStatusException.class, () -> referentielRestApi.add(impactReseauDTO)); - assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); - assertEquals("La source est obligatoire", exception.getReason()); - } - - @Test - void add_whenNullValue_shouldThrowBadRequestException() { - var exception = assertThrows(ResponseStatusException.class, () -> referentielRestApi.add(null)); - assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); - assertEquals("Le corps de la requête ne peut être null", exception.getReason()); - } - - @Test - void update_shouldCallFacadeAddOrUpdate() throws ReferentielException { - when(referentielFacade.addOrUpdate(any())).thenReturn(new ImpactReseauDTO()); - ImpactReseauDTO impactReseauDTO = new ImpactReseauDTO("ImpactReseauMobileMoyen", "UTILISATION", - "Changement Climatique", "kg CO² eq", "La source est obligatoire", 10.0d, 10.0d); - - ResponseEntity<ImpactReseauDTO> actualAddResult = referentielRestApi.update(impactReseauDTO); - - assertTrue(actualAddResult.hasBody()); - assertTrue(actualAddResult.getHeaders().isEmpty()); - assertEquals(HttpStatus.OK, actualAddResult.getStatusCode()); - verify(referentielFacade).addOrUpdate(any()); - } - - @Test - void update_whenEmptySource_shouldThrowBadRequestException() throws ReferentielException { - when(referentielFacade.addOrUpdate(any())).thenReturn(new ImpactReseauDTO()); - ImpactReseauDTO impactReseauDTO = new ImpactReseauDTO("ImpactReseauMobileMoyen", "UTILISATION", - "Changement Climatique", "kg CO² eq", "", 10.0d, 10.0d); - - var exception = assertThrows(ResponseStatusException.class, () -> referentielRestApi.update(impactReseauDTO)); - assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); - assertEquals("La source est obligatoire", exception.getReason()); - } - - @Test - void update_whenNullValue_shouldThrowBadRequestException() { - var exception = assertThrows(ResponseStatusException.class, () -> referentielRestApi.update(null)); - assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); - assertEquals("Le corps de la requête ne peut être null", exception.getReason()); - } - - @Test - void importCSV_shouldCallPurgeAndAddAll() throws IOException, ReferentielException { - doNothing().when(referentielFacade).purgeAndAddAll(any()); - referentielRestApi.importCSV(new MockMultipartFile("Name", "AAAAAAAA".getBytes(StandardCharsets.UTF_8))); - verify(referentielFacade).purgeAndAddAll(any()); - } - - @Test - void importCSV_whenEmptyFileThenShouldThrowException() throws ReferentielException { - doNothing().when(referentielFacade).purgeAndAddAll(any()); - MockMultipartFile file = new MockMultipartFile("Name", (byte[]) null); - ResponseStatusException responseStatusException = assertThrows(ResponseStatusException.class, () -> referentielRestApi.importCSV(file)); - assertEquals(HttpStatus.BAD_REQUEST, responseStatusException.getStatusCode()); - assertEquals("Le fichier n'existe pas ou alors il est vide", responseStatusException.getReason()); - } - - @Test - void importCSV_whenNullFileThenShouldThrowException() throws ReferentielException { - doNothing().when(referentielFacade).purgeAndAddAll(any()); - ResponseStatusException responseStatusException = assertThrows(ResponseStatusException.class, () -> referentielRestApi.importCSV(null)); - assertEquals(HttpStatus.BAD_REQUEST, responseStatusException.getStatusCode()); - assertEquals("Le fichier n'existe pas ou alors il est vide", responseStatusException.getReason()); - } - - @Test - void exportCSV_shouldReturnCSVFile() { - var servletResponse = new MockHttpServletResponse(); - - assertDoesNotThrow(() -> referentielRestApi.exportCSV(servletResponse)); - - assertEquals("text/csv;charset=UTF-8", servletResponse.getContentType()); - String headerContentDisposition = servletResponse.getHeader("Content-Disposition"); - assertNotNull(headerContentDisposition); - assertTrue(headerContentDisposition.contains("attachment; filename=impactReseaux-")); - assertEquals(200, servletResponse.getStatus()); - - } -} - diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacadeTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacadeTest.java deleted file mode 100644 index 3587b1fc4c9ea629e63cbb7abd3325997070db20..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/restapi/facade/ImpactReseauFacadeTest.java +++ /dev/null @@ -1,154 +0,0 @@ -package org.mte.numecoeval.referentiel.infrastructure.restapi.facade; - -import org.hibernate.exception.ConstraintViolationException; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mte.numecoeval.referentiel.domain.exception.ReferentielException; -import org.mte.numecoeval.referentiel.domain.model.ImpactReseau; -import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId; -import org.mte.numecoeval.referentiel.domain.ports.output.ReferentielPersistencePort; -import org.mte.numecoeval.referentiel.factory.TestDataFactory; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper; -import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapperImpl; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.jupiter.api.Assertions.*; - -class ImpactReseauFacadeTest { - - @InjectMocks - ImpactReseauFacade facadeToTest; - - @Mock - private ReferentielPersistencePort<ImpactReseau, ImpactReseauId> persistencePort; - - private ImpactReseauMapper mapper = new ImpactReseauMapperImpl(); - - @BeforeEach - void setup() { - MockitoAnnotations.openMocks(this); - ReflectionTestUtils.setField(facadeToTest, "mapper", mapper); - } - - @Test - void get_shouldReturnMatchingDTO() throws ReferentielException { - var wantedDTOId = TestDataFactory.ImpactReseauFactory.idDTO( - TestDataFactory.EtapeFactory.idDTO(TestDataFactory.DEFAULT_ETAPE), - TestDataFactory.CritereFactory.idDTO(TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen" - ); - var expectedDomainID = TestDataFactory.ImpactReseauFactory.idDomain( - TestDataFactory.EtapeFactory.idDomain(TestDataFactory.DEFAULT_ETAPE), - TestDataFactory.CritereFactory.idDomain(TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen" - ); - var expectedDomain = TestDataFactory.ImpactReseauFactory.domain( - TestDataFactory.EtapeFactory.domain(TestDataFactory.DEFAULT_ETAPE, "Test"), - TestDataFactory.CritereFactory.domain(TestDataFactory.DEFAULT_CRITERE, TestDataFactory.DEFAULT_UNITE, TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen", "Test", 0.12, 0.0012 - ); - - Mockito.when(persistencePort.get(expectedDomainID)).thenReturn(expectedDomain); - - var dto = assertDoesNotThrow(() -> facadeToTest.get(wantedDTOId)); - - - Assertions.assertEquals(expectedDomain.getEtape(), dto.getEtapeACV()); - Assertions.assertEquals(expectedDomain.getCritere(), dto.getCritere()); - Assertions.assertEquals(expectedDomain.getRefReseau(), dto.getRefReseau()); - Assertions.assertEquals(expectedDomain.getSource(), dto.getSource()); - Assertions.assertEquals(expectedDomain.getValeur(), dto.getValeur()); - Assertions.assertEquals(expectedDomain.getConsoElecMoyenne(), dto.getConsoElecMoyenne()); - } - - @Test - void addOrUpdate_shouldCallSaveThenReturnMatchingDTO() throws ReferentielException { - var dtoToSave = TestDataFactory.ImpactReseauFactory.dto( - TestDataFactory.EtapeFactory.dto(TestDataFactory.DEFAULT_ETAPE, "Test"), - TestDataFactory.CritereFactory.dto(TestDataFactory.DEFAULT_CRITERE, TestDataFactory.DEFAULT_UNITE, TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen", "Test", 0.12, 0.0012 - ); - Mockito.when(persistencePort.save(Mockito.any())).thenAnswer(invocationOnMock -> invocationOnMock.getArgument(0)); - ArgumentCaptor<ImpactReseau> valueCapture = ArgumentCaptor.forClass(ImpactReseau.class); - - var savedDTO = assertDoesNotThrow(() -> facadeToTest.addOrUpdate(dtoToSave)); - - Mockito.verify(persistencePort, Mockito.times(1)).save(valueCapture.capture()); - - var domainSaved = valueCapture.getValue(); - assertEquals(domainSaved.getEtape(), savedDTO.getEtapeACV()); - assertEquals(domainSaved.getCritere(), savedDTO.getCritere()); - assertEquals(domainSaved.getRefReseau(), savedDTO.getRefReseau()); - assertEquals(domainSaved.getSource(), savedDTO.getSource()); - assertEquals(domainSaved.getValeur(), savedDTO.getValeur()); - assertEquals(domainSaved.getConsoElecMoyenne(), savedDTO.getConsoElecMoyenne()); - - assertEquals(dtoToSave, savedDTO); - } - - @Test - void addOrUpdate_whenErrorOnSave_shouldThrowException() throws ReferentielException { - var dtoToSave = TestDataFactory.ImpactReseauFactory.dto( - TestDataFactory.EtapeFactory.dto("NonExistante", "Test"), - TestDataFactory.CritereFactory.dto("NonExistant", TestDataFactory.DEFAULT_UNITE, TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen", "Test", 0.12, 0.0012 - ); - ConstraintViolationException expectedSaveException = new ConstraintViolationException("Erreur de contrainte sur la table parente", null, "ETAPE"); - Mockito.when(persistencePort.save(Mockito.any())).thenThrow(expectedSaveException); - - var exception = assertThrows(RuntimeException.class, () -> facadeToTest.addOrUpdate(dtoToSave)); - - assertEquals(expectedSaveException, exception); - } - - @Test - void purgeAndAddAll_ShouldCallPurgeThenSaveAll() throws ReferentielException { - var dtosToSave = Arrays.asList( - TestDataFactory.ImpactReseauFactory.dto( - TestDataFactory.EtapeFactory.dto(TestDataFactory.DEFAULT_ETAPE, "Test"), - TestDataFactory.CritereFactory.dto(TestDataFactory.DEFAULT_CRITERE, TestDataFactory.DEFAULT_UNITE, TestDataFactory.DEFAULT_CRITERE), - "impactReseauMobileMoyen", "Monitor", 0.12, 0.0012 - ), - TestDataFactory.ImpactReseauFactory.dto( - TestDataFactory.EtapeFactory.dto("FIN_DE_VIE", "Autre Test"), - TestDataFactory.CritereFactory.dto("Acidification", "m3", "Autre Test"), - "impactReseauMobileMoyen", "Monitor", 0.12, 0.0012 - ) - ); - ArgumentCaptor<Collection<ImpactReseau>> valueCapture = ArgumentCaptor.forClass(Collection.class); - - assertDoesNotThrow(() -> facadeToTest.purgeAndAddAll(dtosToSave)); - - Mockito.verify(persistencePort, Mockito.times(1)).purge(); - Mockito.verify(persistencePort, Mockito.times(1)).saveAll(valueCapture.capture()); - - var expectedDomains = valueCapture.getValue(); - assertNotNull(expectedDomains); - assertEquals(dtosToSave.size(), expectedDomains.size()); - dtosToSave.forEach(dto -> { - var matchingDomain = expectedDomains.stream() - .filter(domain -> - dto.getEtapeACV().equals(domain.getEtape()) - && dto.getCritere().equals(domain.getCritere()) - && dto.getRefReseau().equals(domain.getRefReseau())) - .findAny(); - assertTrue(matchingDomain.isPresent()); - var domain = matchingDomain.get(); - assertEquals(dto.getEtapeACV(), domain.getEtape()); - assertEquals(dto.getCritere(), domain.getCritere()); - assertEquals(dto.getRefReseau(), domain.getRefReseau()); - assertEquals(dto.getSource(), domain.getSource()); - assertEquals(dto.getValeur(), domain.getValeur()); - assertEquals(dto.getConsoElecMoyenne(), domain.getConsoElecMoyenne()); - }); - } -} diff --git a/services/api-referentiel/src/test/resources/csv/unit/impactreseau.csv b/services/api-referentiel/src/test/resources/csv/unit/impactreseau.csv deleted file mode 100644 index d459911d45749e7911f3580666aa6f4279bd4006..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/resources/csv/unit/impactreseau.csv +++ /dev/null @@ -1,7 +0,0 @@ -refReseau;etapeACV;critere;valeur;unite;consoElecMoyenne;source -impactReseauMobileMoyen;DISTRIBUTION;Changement climatique;1.428;;0.0020;RefTest V1.00 -impactReseauMobileMoyen;FABRICATION;Changement climatique;518.28;;;RefTest V1.00 -impactReseauMobileMoyen;FIN_DE_VIE;Changement climatique;64.28;;;RefTest V1.00 -impactReseauMobileMoyen;UTILISATION;Changement climatique;76.28;;;RefTest V1.00 - - diff --git a/services/api-referentiel/src/test/resources/csv/unit/impactreseau_errorInMiddle.csv b/services/api-referentiel/src/test/resources/csv/unit/impactreseau_errorInMiddle.csv deleted file mode 100644 index 869d874e13a138adfe9b5fe3fd2a93c0c096b646..0000000000000000000000000000000000000000 --- a/services/api-referentiel/src/test/resources/csv/unit/impactreseau_errorInMiddle.csv +++ /dev/null @@ -1,10 +0,0 @@ -refReseau;etapeACV;critere;valeur;unite;consoElecMoyenne;source -impactReseauMobileMoyen;DISTRIBUTION;Changement climatique;1.428;;0.0020;RefTest V1.00 -impactReseauMobileMoyen;FABRICATION;Changement climatique;518.28;;;RefTest V1.00 -;RefReseauAbsent;RefReseauAbsent;;;;Test;Ces;Colonnes;Sont;Des;Erreurs -RefEtapeAbsent;;RefEtapeAbsent;;;;Test;Ces;Colonnes;Sont;Des;Erreurs -RefCritereAbsent;RefCritereAbsent;;;;;Test;Ces;Colonnes;Sont;Des;Erreurs -impactReseauMobileMoyen;FIN_DE_VIE;Changement climatique;64.28;;;RefTest V1.00 -impactReseauMobileMoyen;UTILISATION;Changement climatique;76.28;;;RefTest V1.00 - - diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java index ba2cdfafff91140a6667c23841e05242995715c1..558c016d4df1b54cb45261b34a6acabf75efe63a 100644 --- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java +++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java @@ -24,8 +24,6 @@ public class EquipementPhysique { private Double dureeUsageAmont; private Double dureeUsageAval; private Double quantite; - private Float goTelecharge; - private Double nbJourUtiliseAn; private String nbCoeur; private String nomCourtDatacenter; private DataCenter dataCenter; diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/indicateurs/ImpactReseau.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/indicateurs/ImpactReseau.java deleted file mode 100644 index 5922d030f5783bf42d2bc7c660618dd22b30f922..0000000000000000000000000000000000000000 --- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/indicateurs/ImpactReseau.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.mte.numecoeval.calculs.domain.data.indicateurs; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -@Builder -@AllArgsConstructor -@Getter -@Setter -public class ImpactReseau { - LocalDateTime dateCalcul; - String etapeACV; - String critere; - String nomLot; - LocalDate dateLot; - String nomOrganisation; - String nomEquipement; - String nomEntite; - String nomSourceDonnee; - - - String versionCalcul; - String source; - String statutIndicateur; - String trace; - String unite; - Double impactUnitaire; - String reference; -} diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactReseau.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactReseau.java deleted file mode 100644 index ae8dd1e0118cd535bb1c6a3ce01e27897c8d18fe..0000000000000000000000000000000000000000 --- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactReseau.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.mte.numecoeval.calculs.domain.data.trace; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TraceCalculImpactReseau { - - private String critere; - private String etapeACV; - private String sourceReferentielReseau; - private String equipementPhysique; - private String impactReseauMobileMoyen; - private String goTelecharge; - private String formule; - private String erreur; -} diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java index c6956b920be458e8645f849910b8ae1d2faed2f7..eefa835665859654c22bd4bc92cb65da3e8e3690 100644 --- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java +++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java @@ -24,7 +24,6 @@ import java.util.stream.Collectors; @AllArgsConstructor public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEquipementPhysiqueService { private static final String VERSION_CALCUL = "1.0"; - public static final String NB_JOUR_UTILISE_PAR_DEFAUT = "NbJourUtiliseParDefaut"; public static final String ERREUR_DE_CALCUL_IMPACT_EQUIPEMENT_MESSAGE = "Erreur de calcul impact équipement: Type: {}, Cause: {}, Etape: {}, Critere: {}, Equipement Physique: {}, RefEquipementRetenu: {}, RefEquipementParDefaut: {}"; private final DureeDeVieEquipementPhysiqueService dureeDeVieEquipementPhysiqueService; diff --git a/services/common/src/main/resources/static/README.md b/services/common/src/main/resources/static/README.md index 0ee297a8fbcbefe11ef164d03bd472ff05f02ad8..cc478ee24f9ee0fef3508d8d9bf76fe0e39d2750 100644 --- a/services/common/src/main/resources/static/README.md +++ b/services/common/src/main/resources/static/README.md @@ -13,7 +13,7 @@ Fichiers openapi __générés__ par les composants: - api-referentiels-openapi.yaml, COMPOSANT : api-referentiels, PORT : 18080 - api-expositiondonneesentrees-openapi.yaml, COMPOSANT : api-expositiondonneesentrees, PORT : 18081 -- api-event-calculs-openapi.yaml, COMPOSANT : api-event-calculs, PORT : 18092 +- api-event-calculs-openapi.yaml, COMPOSANT : api-event-calculs, PORT : 18085 Fichiers pilotés __manuellement__ dans ce composant common: diff --git a/services/common/src/main/resources/static/api-event-calculs-async-openapi.yaml b/services/common/src/main/resources/static/api-event-calculs-async-openapi.yaml index a010005d45e6ff2ecc240b65cdc726aa1e1d132f..49980fd649b59d1187c92d9f273c4f25ad8ede02 100644 --- a/services/common/src/main/resources/static/api-event-calculs-async-openapi.yaml +++ b/services/common/src/main/resources/static/api-event-calculs-async-openapi.yaml @@ -17,8 +17,6 @@ tags: description: Endpoints liés aux calculs pour une opération non IT - name: Calculs Messagerie description: Endpoints liés aux calculs pour un élément de messagerie - - name: Calculs Reseau - description: Endpoints liés aux calculs autour de l'usage du réseau paths: /calculs/equipementPhysique: post: @@ -53,39 +51,6 @@ paths: 'application/json': schema: $ref: "#/components/schemas/IndicateurImpactEquipementPhysiqueRest" - /calculs/reseau/equipementPhysique: - post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique lié à l'usage du réseau. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique lié à l'usage du réseau. - tags: - - Calculs Reseau - operationId: calculerImpactReseau - requestBody: - required: true - content: - 'application/json': - schema: - $ref: "#/components/schemas/DemandeCalculImpactReseauEquipementPhysiqueRest" - responses: - "500": - description: Erreur interne du service - content: - 'application/json': - schema: - $ref: "#/components/schemas/ErreurRest" - "400": - description: Indicateur en erreur - content: - 'application/json': - schema: - $ref: "#/components/schemas/IndicateurImpactReseauRest" - "200": - description: Indicateur calculé. - content: - 'application/json': - schema: - $ref: "#/components/schemas/IndicateurImpactReseauRest" /calculs/equipementVirtuel: post: summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement virtuel. @@ -295,14 +260,6 @@ components: nomCourtDatacenter: description: "" type: string - nbJourUtiliseAn: - description: "" - type: number - format: double - goTelecharge: - description: "" - type: number - format: float quantite: description: "" type: number @@ -550,24 +507,6 @@ components: type: number format: double description: Référentiel de critère d'impact écologique - ImpactReseauRest: - type: object - properties: - refReseau: - type: string - etapeACV: - type: string - critere: - type: string - unite: - type: string - valeur: - type: number - format: double - consoElecMoyenne: - type: number - format: double - description: Référentiel d'impact écologique pour l'usage du réseau par un équipement ImpactEquipementRest: type: object properties: @@ -679,40 +618,6 @@ components: qualite: description: "Qualité de la donnée" type: string - IndicateurImpactReseauRest: - type: object - properties: - dateCalcul: - type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" - format: date-time - versionCalcul: - type: string - etapeACV: - type: string - description: "Code de l'étape ACV associé à l'indicateur, peut être null\ - \ pour certains indicateurs" - critere: - type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" - statutIndicateur: - type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" - trace: - type: string - description: Trace du calcul ayant produit l'indicateur - unite: - type: string - description: "Unite du critère associé, peut être null" - impactUnitaire: - type: number - format: double - qualite: - description: "Qualité de la donnée" - type: string IndicateurImpactEquipementVirtuelRest: description: Indicateur d'impact écologique d'un équipement virtuel type: object @@ -927,25 +832,6 @@ components: type: array items: $ref: "#/components/schemas/ImpactEquipementRest" - DemandeCalculImpactReseauEquipementPhysiqueRest: - description: | - Demande de calcul d'impact d'équipement physique. - Contient tous les éléments nécéssaire au calcul d'impact (équipement physique, référentiels) - properties: - equipementPhysique: - $ref: "#/components/schemas/EquipementPhysiqueRest" - etape: - $ref: "#/components/schemas/EtapeRest" - critere: - $ref: "#/components/schemas/CritereRest" - impactsReseau: - description: | - Référentiels des Critères d'impact réseau. - La référence réseau doit être "impactReseauMobileMoyen". - type: array - maxItems: 1 - items: - $ref: "#/components/schemas/ImpactReseauRest" DemandeCalculEquipementVirtuelRest: description: Objet regroupant toutes les données nécessaires au calcul unitaire d'indicateur d'impact écologique pour un équipement virtuel. required: diff --git a/services/common/src/main/resources/static/api-event-calculs-openapi.yaml b/services/common/src/main/resources/static/api-event-calculs-openapi.yaml index b066c967a066392ce1acbdd531ebf3e72e96a33f..d9f96433342a02777c0543aed4222975d7b334b8 100644 --- a/services/common/src/main/resources/static/api-event-calculs-openapi.yaml +++ b/services/common/src/main/resources/static/api-event-calculs-openapi.yaml @@ -1,393 +1,359 @@ openapi: 3.0.1 info: - title: NumEcoEval - API calculs - version: v1 - license: - name: Apache 2.0 - description: | - API permettant de réaliser des calculs unitaires d'impact écologiques. \ + title: OpenAPI definition + version: v0 +servers: + - url: http://localhost:18085 + description: Generated server url tags: - name: Calculs Equipement Physique description: Endpoints liés aux calculs pour un équipement physique - name: Calculs Equipement Virtuel description: Endpoints liés aux calculs pour un équipement virtuel - - name: Calculs Application - description: Endpoints liés aux calculs pour une application - name: Calculs Messagerie description: Endpoints liés aux calculs pour un élément de messagerie - - name: Calculs Reseau - description: Endpoints liés aux calculs autour de l'usage du réseau + - name: Calculs OperationNonIT + description: Endpoints liés aux calculs pour une opération non IT + - name: Calculs Application + description: Endpoints liés aux calculs pour une application paths: - /calculs/equipementPhysique: + /calculs/operationNonIT: post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique. tags: - - Calculs Equipement Physique - operationId: calculerImpactEquipementPhysique + - Calculs OperationNonIT + summary: Endpoint pour le calcul unitaire d'impact écologique pour une opération Non IT. + description: 'Endpoint pour le calcul unitaire d''impact écologique pour une opération Non IT. ' + operationId: calculerImpactOperationNonIT requestBody: - required: true content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/DemandeCalculImpactEquipementPhysiqueRest" + $ref: '#/components/schemas/DemandeCalculImpactOperationNonITRest' + required: true responses: - "500": - description: Erreur interne du service + '200': + description: Indicateur calculé. content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/ErreurRest" - "400": + $ref: '#/components/schemas/IndicateurImpactOperationNonITRest' + '400': description: Indicateur en erreur content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactEquipementPhysiqueRest" - "200": - description: Indicateur calculé. + $ref: '#/components/schemas/IndicateurImpactOperationNonITRest' + '500': + description: Erreur interne du service content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactEquipementPhysiqueRest" - /calculs/reseau/equipementPhysique: + $ref: '#/components/schemas/ErreurRest' + /calculs/messagerie: post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique lié à l'usage du réseau. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique lié à l'usage du réseau. tags: - - Calculs Reseau - operationId: calculerImpactReseau + - Calculs Messagerie + summary: Endpoint pour le calcul unitaire d'impact écologique pour un élément de messagerie. + description: 'Endpoint pour le calcul unitaire d''impact écologique pour un élément de messagerie ' + operationId: calculerImpactMessagerie requestBody: - required: true content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/DemandeCalculImpactReseauEquipementPhysiqueRest" + $ref: '#/components/schemas/DemandeCalculMessagerieRest' + required: true responses: - "500": - description: Erreur interne du service + '200': + description: Indicateur calculé. content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/ErreurRest" - "400": + $ref: '#/components/schemas/IndicateurImpactMessagerieRest' + '400': description: Indicateur en erreur content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactReseauRest" - "200": - description: Indicateur calculé. + $ref: '#/components/schemas/IndicateurImpactMessagerieRest' + '500': + description: Erreur interne du service content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactReseauRest" + $ref: '#/components/schemas/ErreurRest' /calculs/equipementVirtuel: post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement virtuel. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour un équipement virtuel. - Une demande peut se baser sur le contenu de la sortie du calcul d'impact d'équipement physique. tags: - Calculs Equipement Virtuel + summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement virtuel. + description: 'Endpoint pour le calcul unitaire d''impact écologique pour un équipement virtuel. Une demande peut se baser sur le contenu de la sortie du calcul d''impact d''équipement physique. ' operationId: calculerImpactEquipementVirtuel requestBody: - required: true content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/DemandeCalculEquipementVirtuelRest" + $ref: '#/components/schemas/DemandeCalculEquipementVirtuelRest' + required: true responses: - "500": - description: Erreur interne du service + '200': + description: Indicateur calculé. content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/ErreurRest" - "400": + $ref: '#/components/schemas/IndicateurImpactEquipementVirtuelRest' + '400': description: Indicateur en erreur content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactEquipementVirtuelRest" - "200": - description: Indicateur calculé. + $ref: '#/components/schemas/IndicateurImpactEquipementVirtuelRest' + '500': + description: Erreur interne du service content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactEquipementVirtuelRest" - /calculs/application: + $ref: '#/components/schemas/ErreurRest' + /calculs/equipementPhysique: post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour une application. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour une application. - Une demande peut se baser sur le contenu de la sortie du calcul d'impact d'équipement virtuel. tags: - - Calculs Application - operationId: calculerImpactApplication + - Calculs Equipement Physique + summary: Endpoint pour le calcul unitaire d'impact écologique pour un équipement physique. + description: 'Endpoint pour le calcul unitaire d''impact écologique pour un équipement physique. ' + operationId: calculerImpactEquipementPhysique requestBody: - required: true content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/DemandeCalculApplicationRest" + $ref: '#/components/schemas/DemandeCalculImpactEquipementPhysiqueRest' + required: true responses: - "500": - description: Erreur interne du service + '200': + description: Indicateur calculé. content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/ErreurRest" - "400": + $ref: '#/components/schemas/IndicateurImpactEquipementPhysiqueRest' + '400': description: Indicateur en erreur content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactApplicationRest" - "200": - description: Indicateur calculé. + $ref: '#/components/schemas/IndicateurImpactEquipementPhysiqueRest' + '500': + description: Erreur interne du service content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactApplicationRest" - /calculs/messagerie: + $ref: '#/components/schemas/ErreurRest' + /calculs/application: post: - summary: Endpoint pour le calcul unitaire d'impact écologique pour un élément de messagerie. - description: | - Endpoint pour le calcul unitaire d'impact écologique pour un élément de messagerie tags: - - Calculs Messagerie - operationId: calculerImpactMessagerie + - Calculs Application + summary: Endpoint pour le calcul unitaire d'impact écologique pour une application. + description: 'Endpoint pour le calcul unitaire d''impact écologique pour une application. Une demande peut se baser sur le contenu de la sortie du calcul d''impact d''équipement virtuel. ' + operationId: calculerImpactApplication requestBody: - required: true content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/DemandeCalculMessagerieRest" + $ref: '#/components/schemas/DemandeCalculApplicationRest' + required: true responses: - "500": - description: Erreur interne du service + '200': + description: Indicateur calculé. content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/ErreurRest" - "400": + $ref: '#/components/schemas/IndicateurImpactApplicationRest' + '400': description: Indicateur en erreur content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactMessagerieRest" - "200": - description: Indicateur calculé. + $ref: '#/components/schemas/IndicateurImpactApplicationRest' + '500': + description: Erreur interne du service content: - 'application/json': + application/json: schema: - $ref: "#/components/schemas/IndicateurImpactMessagerieRest" + $ref: '#/components/schemas/ErreurRest' components: schemas: ErreurRest: - description: Objet standard pour les réponses en cas d'erreur d'API type: object properties: code: - description: Code de l'erreur type: string + description: Code de l'erreur message: - description: Message de l'erreur type: string + description: Message de l'erreur status: - description: Code Statut HTTP de la réponse type: integer + description: Code Statut HTTP de la réponse + format: int32 timestamp: - description: Date & Heure de l'erreur type: string + description: Date & Heure de l'erreur format: date-time - # Entrées - EquipementPhysiqueRest: - description: Représentation d'un équipement physique dans NumEcoEval + description: Objet standard pour les réponses en cas d'erreur d'API + IndicateurImpactOperationNonITRest: type: object properties: - nomEquipementPhysique: - description: "" - type: string - modele: - description: "" + dateCalcul: type: string - type: - description: "" + description: Date et Heure du calcul, même valeur pour tous les indicateurs créés avec le même lot d'objets d'entrées + format: date-time + versionCalcul: type: string - statut: - description: "" + etapeACV: type: string - paysDUtilisation: - description: "" + description: Code de l'étape ACV associé à l'indicateur, peut être null pour certains indicateurs + critere: type: string - utilisateur: - description: "" + description: Nom du critère associé à l'indicateur, peut être null pour certains indicateurs + statutIndicateur: type: string - dateAchat: - description: "" + description: Statut de l'indicateur, vaut "OK" si l'indicateur est calcul et "ERREUR" si l'indicateur est en erreur + trace: type: string - format: date - dateRetrait: - description: "" + description: Trace du calcul ayant produit l'indicateur + unite: type: string - format: date - nbCoeur: - description: "" + description: Unite du critère associé, peut être null + nomItemNonIT: type: string - nomCourtDatacenter: - description: "" + typeItem: type: string - nbJourUtiliseAn: - description: "" - type: number - format: double - goTelecharge: - description: "" - type: number - format: float - quantite: - description: "" + impactUnitaire: type: number format: double - default: 1.0 - consoElecAnnuelle: - description: "" + consoElecMoyenne: type: number format: double - nbEquipementsVirtuels: - description: "Nombre d'équipements virtuels rattachés à l'équipement physique - Utilisé dans les traitements" - type: integer - nbTotalVCPU: - description: "Nombre total de VCPU (correspond à la somme des vCPU définis dans les équipements virtuels) ou null si un des équipements virtuels n'a pas de vCPU - Utilisé dans les traitements" + quantite: type: integer + format: int32 + statutItem: + type: string qualite: - description: "Qualité de la donnée" type: string - dataCenter: - $ref: "#/components/schemas/DataCenterRest" - DataCenterRest: - description: Représentation d'un Data Center dans NumEcoEval + description: Qualité de la donnée + CritereRest: + type: object properties: - nomCourtDatacenter: - description: "" + nomCritere: type: string - nomLongDatacenter: - description: "" + description: Nom du critère d'impact écologique + unite: type: string - pue: - description: "" - type: number - format: double - localisation: - description: "" + description: Unité du critère d'impact écologique + DemandeCalculImpactOperationNonITRest: + type: object + properties: + operationNonIT: + $ref: '#/components/schemas/OperationNonITRest' + typeItem: + $ref: '#/components/schemas/TypeItemRest' + hypotheses: + type: array + items: + $ref: '#/components/schemas/HypotheseRest' + etape: + $ref: '#/components/schemas/EtapeRest' + critere: + $ref: '#/components/schemas/CritereRest' + facteurCaracterisations: + type: array + description: Facteur de caractérisation de l'item + items: + $ref: '#/components/schemas/FacteurCaracterisationRest' + description: Objet regroupant toutes les données pour le calcul des indicateurs d'impact des opérations non it dans NumEcoEval + EtapeRest: + type: object + properties: + code: type: string - qualite: - description: "Qualité de la donnée" + libelle: type: string - EquipementVirtuelRest: - description: Représentation d'un équipement virtuel dans NumEcoEval + FacteurCaracterisationRest: + type: object properties: - nomEquipementVirtuel: - description: "" + nom: type: string - nomEquipementPhysique: - description: "" + etape: type: string - vCPU: - description: "" - type: integer - cluster: - description: "" + critere: type: string - typeEqv: - description: | - Le type d'équipement virtuel contient "calcul", "stockage" ou null. - Peut être omis entièrement si ce n'est pas applicable. + niveau: type: string - capaciteStockage: - description: | - Capacité de stockage de l'équipement virtuel en To. + tiers: + type: string + categorie: + type: string + source: + type: string + valeur: type: number format: double - cleRepartition: - description: | - La clé de repartition est exprimée comme une fraction. + unite: + type: string + consoElecMoyenne: type: number format: double - consoElecAnnuelle: - description: | - Consommation électrique annuelle de l'équipement virtuel. + localisation: + type: string + description: + type: string + description: Référentiel des facteurs de caractérisation pour un item + HypotheseRest: + type: object + properties: + code: + type: string + description: 'Code de l''hypothèse. ' + valeur: type: number + description: Valeur de l'hypothèse format: double - qualite: - description: "Qualité de la donnée" - type: string - ApplicationRest: - description: Représentation d'une application dans NumEcoEval + OperationNonITRest: + type: object properties: - nomApplication: - description: "" + nomItemNonIT: type: string - typeEnvironnement: - description: "" + quantite: + type: number + format: double + type: type: string - nomEquipementVirtuel: - description: "" + dureeDeVie: + type: number + format: double + localisation: type: string - nomEquipementPhysique: - description: "" + nomEntite: type: string - domaine: - description: "" + nomSourceDonnee: type: string - sousDomaine: - description: "" + description: Nom de la source de la donnée + nomCourtDatacenter: type: string - qualite: - description: "Qualité de la donnée" + description: type: string - MessagerieRest: - description: Représentation d'éléments de messagerie dans NumEcoEval - properties: - nombreMailEmis: - description: "" - type: integer - nombreMailEmisXDestinataires: - description: "" - type: integer - volumeTotalMailEmis: - description: "" + consoElecAnnuelle: type: number format: double - moisAnnee: - description: "Mois et Année rattachés au données, format MMAAAA" - type: integer - nomEntite: - description: "" - type: string - - - # Référentiels - CorrespondanceRefEquipementRest: - type: object - properties: - modeleEquipementSource: - type: string - description: Modèle de l'équipement - refEquipementCible: + qualite: type: string - description: Référence d'équipement correspondant au modèle de l'équipement - description: Référentiel de correspondance entre un modèle d'équipement physique - et une référence d'équipement dans les référentiels. - TypeEquipementRest: + description: Qualité de la donnée + description: Représentation d'opérations non IT dans NumEcoEval + TypeItemRest: type: object properties: type: type: string + categorie: + type: string serveur: type: boolean commentaire: @@ -395,259 +361,415 @@ components: dureeVieDefaut: type: number format: double - refEquipementParDefaut: - type: string - description: Référentiel de type d'équipement physique. - HypotheseRest: - type: object - properties: - code: - description: | - Code de l'hypothèse. + refCosoMoyenne: type: string - valeur: - description: "Valeur de l'hypothèse" - type: number - format: double - EtapeRest: - type: object - properties: - code: + source: type: string - libelle: + refItemParDefaut: type: string - CritereRest: + description: Référentiel des types d'item. + IndicateurImpactMessagerieRest: type: object properties: - nomCritere: - type: string - description: Nom du critère d'impact écologique - unite: + dateCalcul: type: string - description: Unité du critère d'impact écologique - MixElectriqueRest: - type: object - properties: - pays: + description: Date et Heure du calcul, même valeur pour tous les indicateurs créés avec le même lot d'objets d'entrées + format: date-time + versionCalcul: type: string critere: type: string - valeur: - type: number - format: double - description: Référentiel de critère d'impact écologique - ImpactReseauRest: - type: object - properties: - refReseau: - type: string - etapeACV: + description: Nom du critère associé à l'indicateur, peut être null pour certains indicateurs + statutIndicateur: type: string - critere: + description: Statut de l'indicateur, vaut "OK" si l'indicateur est calcul et "ERREUR" si l'indicateur est en erreur + trace: type: string + description: Trace du calcul ayant produit l'indicateur unite: type: string - valeur: + description: Unite du critère associé, peut être null + impactMensuel: type: number format: double - consoElecMoyenne: + moisAnnee: + type: integer + format: int32 + volumeTotalMailEmis: type: number format: double - description: Référentiel d'impact écologique pour l'usage du réseau par un équipement - ImpactEquipementRest: + nombreMailEmis: + type: number + format: double + description: Indicateur d'impact de messagerie + DemandeCalculMessagerieRest: type: object properties: - refEquipement: - type: string - etape: - type: string + messagerie: + $ref: '#/components/schemas/MessagerieRest' critere: - type: string - type: - type: string - valeur: - type: number - format: double - consoElecMoyenne: - type: number - format: double - description: Référentiel d'impact écologique pour un équipement physique + $ref: '#/components/schemas/CritereRest' + impactsMessagerie: + type: array + items: + $ref: '#/components/schemas/ImpactMessagerieRest' + description: Objet regroupant toutes les données pour le calcul des indicateurs d'impact de messagerie dans NumEcoEval ImpactMessagerieRest: type: object - description: Référentiel - L'équation d'impact est une fonction affine de la forme a * x + b properties: constanteCoefficientDirecteur: - description: Cette constante correspond à "a" dans la fonction affine type: number + description: Cette constante correspond à "a" dans la fonction affine format: double constanteOrdonneeOrigine: - description: Cette constante correspond à "b" dans la fonction affine type: number + description: Cette constante correspond à "b" dans la fonction affine format: double critere: + type: string description: Critère associé à l'impact + description: Référentiel - L'équation d'impact est une fonction affine de la forme a * x + b + MessagerieRest: + type: object + properties: + nombreMailEmis: + type: integer + format: int32 + nombreMailEmisXDestinataires: + type: integer + format: int32 + volumeTotalMailEmis: + type: number + format: double + moisAnnee: + type: integer + description: Mois et Année rattachés au données, format MMAAAA + format: int32 + nomEntite: type: string - - # Indicateurs - IndicateurImpactEquipementPhysiqueRest: + description: Représentation d'éléments de messagerie dans NumEcoEval + IndicateurImpactEquipementVirtuelRest: type: object properties: dateCalcul: type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" + description: Date et Heure du calcul, même valeur pour tous les indicateurs créés avec le même lot d'objets d'entrées format: date-time versionCalcul: type: string etapeACV: type: string - description: "Code de l'étape ACV associé à l'indicateur, peut être null\ - \ pour certains indicateurs" + description: Code de l'étape ACV associé à l'indicateur, peut être null pour certains indicateurs critere: type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" + description: Nom du critère associé à l'indicateur, peut être null pour certains indicateurs + source: + type: string statutIndicateur: type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" + description: Statut de l'indicateur, vaut "OK" si l'indicateur est calcul et "ERREUR" si l'indicateur est en erreur trace: type: string description: Trace du calcul ayant produit l'indicateur unite: type: string - description: "Unite du critère associé, peut être null" - nomEquipement: + description: Unite du critère associé, peut être null + nomEquipementVirtuel: type: string - typeEquipement: + nomEquipement: type: string impactUnitaire: type: number format: double + cluster: + type: string consoElecMoyenne: type: number format: double - quantite: + qualite: + type: string + description: Qualité de la donnée + description: Indicateur d'impact écologique d'un équipement virtuel + DemandeCalculEquipementVirtuelRest: + required: + - equipementVirtuel + - impactEquipement + type: object + properties: + equipementVirtuel: + $ref: '#/components/schemas/EquipementVirtuelRest' + nbTotalVCPU: type: integer + description: 'Nombre total de CPU virtuels sur l''équipement physique parent. Si renseigné, sera utilisé en priorité. Ne sera utilisé que si le type d''équipement virtuel n''est pas "calcul". ' format: int32 - statutEquipementPhysique: + nbEquipementsVirtuels: + type: integer + description: 'Nombre total d''équipements virtuels sur l''équipement physique parent. ' + format: int32 + stockageTotalVirtuel: + type: number + description: 'Stockage total en To pour tous les équipements virtuels sur l''équipement physique parent. Ne sera utilisé que si le type d''équipement virtuel n''est pas "stockage". ' + format: double + impactEquipement: + $ref: '#/components/schemas/IndicateurImpactEquipementPhysiqueRest' + description: Objet regroupant toutes les données nécessaires au calcul unitaire d'indicateur d'impact écologique pour un équipement virtuel. + EquipementVirtuelRest: + type: object + properties: + nomEquipementVirtuel: + type: string + nomEquipementPhysique: + type: string + vCPU: + type: integer + format: int32 + cluster: + type: string + typeEqv: type: string + description: 'Le type d''équipement virtuel contient "calcul", "stockage" ou null. Peut être omis entièrement si ce n''est pas applicable. ' + capaciteStockage: + type: number + description: 'Capacité de stockage de l''équipement virtuel en To. ' + format: double + cleRepartition: + type: number + description: 'La clé de repartition est exprimée comme une fraction. ' + format: double + consoElecAnnuelle: + type: number + description: 'Consommation électrique annuelle de l''équipement virtuel. ' + format: double qualite: - description: "Qualité de la donnée" type: string - IndicateurImpactReseauRest: + description: Qualité de la donnée + description: Représentation d'un équipement virtuel dans NumEcoEval + IndicateurImpactEquipementPhysiqueRest: type: object properties: dateCalcul: type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" + description: Date et Heure du calcul, même valeur pour tous les indicateurs créés avec le même lot d'objets d'entrées format: date-time versionCalcul: type: string etapeACV: type: string - description: "Code de l'étape ACV associé à l'indicateur, peut être null\ - \ pour certains indicateurs" + description: Code de l'étape ACV associé à l'indicateur, peut être null pour certains indicateurs critere: type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" + description: Nom du critère associé à l'indicateur, peut être null pour certains indicateurs statutIndicateur: type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" + description: Statut de l'indicateur, vaut "OK" si l'indicateur est calcul et "ERREUR" si l'indicateur est en erreur trace: type: string description: Trace du calcul ayant produit l'indicateur unite: type: string - description: "Unite du critère associé, peut être null" + description: Unite du critère associé, peut être null + nomEquipement: + type: string + typeEquipement: + type: string impactUnitaire: type: number format: double + consoElecMoyenne: + type: number + format: double + quantite: + type: integer + format: int32 + statutEquipementPhysique: + type: string qualite: - description: "Qualité de la donnée" type: string - IndicateurImpactEquipementVirtuelRest: - description: Indicateur d'impact écologique d'un équipement virtuel + description: Qualité de la donnée + CorrespondanceRefEquipementRest: type: object properties: - dateCalcul: + modeleEquipementSource: type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" - format: date-time - versionCalcul: + description: Modèle de l'équipement + refEquipementCible: type: string - etapeACV: + description: Référence d'équipement correspondant au modèle de l'équipement + description: Référentiel de correspondance entre un modèle d'équipement physique et une référence d'équipement dans les référentiels. + DataCenterRest: + type: object + properties: + nomCourtDatacenter: + type: string + nomLongDatacenter: type: string - description: "Code de l'étape ACV associé à l'indicateur, peut être null\ - \ pour certains indicateurs" + pue: + type: number + format: double + localisation: + type: string + qualite: + type: string + description: Qualité de la donnée + description: Représentation d'un Data Center dans NumEcoEval + DemandeCalculImpactEquipementPhysiqueRest: + type: object + properties: + equipementPhysique: + $ref: '#/components/schemas/EquipementPhysiqueRest' + typeEquipement: + $ref: '#/components/schemas/TypeEquipementRest' + correspondanceRefEquipement: + $ref: '#/components/schemas/CorrespondanceRefEquipementRest' + hypotheses: + type: array + items: + $ref: '#/components/schemas/HypotheseRest' + etape: + $ref: '#/components/schemas/EtapeRest' critere: + $ref: '#/components/schemas/CritereRest' + mixElectriques: + type: array + description: Mix électrique du pays d'utilisation de l'équipement physique + items: + $ref: '#/components/schemas/MixElectriqueRest' + impactEquipements: + type: array + description: 'Référentiels des Critères d''impact d''équipements. La liste ne peut contenir maximum 2 entrées : - 1 pour la référence par défaut (typeEquipement.refEquipementParDefaut) - 1 pour la correspondance cible (correspondanceRefEquipement.refEquipementCible) ' + items: + $ref: '#/components/schemas/ImpactEquipementRest' + description: Demande de calcul d'impact d'équipement physique. Contient tous les éléments nécéssaire au calcul d'impact (équipement physique, référentiels) + EquipementPhysiqueRest: + type: object + properties: + nomEquipementPhysique: type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" - source: + modele: type: string - statutIndicateur: + type: type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" - trace: + statut: type: string - description: Trace du calcul ayant produit l'indicateur - unite: + paysDUtilisation: type: string - description: "Unite du critère associé, peut être null" - nomEquipementVirtuel: + utilisateur: type: string - nomEquipement: + dateAchat: type: string - impactUnitaire: + format: date + dateRetrait: + type: string + format: date + dureeUsageInterne: type: number format: double - cluster: + dureeUsageAmont: + type: number + format: double + dureeUsageAval: + type: number + format: double + nbCoeur: type: string - consoElecMoyenne: + modeUtilisation: + type: string + tauxUtilisation: + type: number + format: double + nomCourtDatacenter: + type: string + quantite: type: number format: double qualite: - description: "Qualité de la donnée" type: string + description: Qualité de la donnée + consoElecAnnuelle: + type: number + format: double + nbEquipementsVirtuels: + type: integer + description: Nombre d'équipements virtuels rattachés à l'équipement physique - Utilisé dans les traitements + format: int32 + nbTotalVCPU: + type: integer + description: Nombre total de VCPU (correspond à la somme des vCPU définis dans les équipements virtuels) ou null si un des équipements virtuels n'a pas de vCPU - Utilisé dans les traitements + format: int32 + dataCenter: + $ref: '#/components/schemas/DataCenterRest' + description: Représentation d'un équipement physique dans NumEcoEval + ImpactEquipementRest: + type: object + properties: + refEquipement: + type: string + etape: + type: string + critere: + type: string + type: + type: string + valeur: + type: number + format: double + consoElecMoyenne: + type: number + format: double + description: Référentiel d'impact écologique pour un équipement physique + MixElectriqueRest: + type: object + properties: + pays: + type: string + critere: + type: string + valeur: + type: number + format: double + description: Référentiel de critère d'impact écologique + TypeEquipementRest: + type: object + properties: + type: + type: string + serveur: + type: boolean + commentaire: + type: string + dureeVieDefaut: + type: number + format: double + refEquipementParDefaut: + type: string + description: Référentiel de type d'équipement physique. IndicateurImpactApplicationRest: - description: Impact d'application + type: object properties: dateCalcul: type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" + description: Date et Heure du calcul, même valeur pour tous les indicateurs créés avec le même lot d'objets d'entrées format: date-time versionCalcul: type: string etapeACV: type: string - description: "Code de l'étape ACV associé à l'indicateur, peut être null\ - \ pour certains indicateurs" + description: Code de l'étape ACV associé à l'indicateur, peut être null pour certains indicateurs critere: type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" + description: Nom du critère associé à l'indicateur, peut être null pour certains indicateurs statutIndicateur: type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" + description: Statut de l'indicateur, vaut "OK" si l'indicateur est calcul et "ERREUR" si l'indicateur est en erreur trace: type: string description: Trace du calcul ayant produit l'indicateur unite: type: string - description: "Unite du critère associé, peut être null" + description: Unite du critère associé, peut être null nomEquipementPhysique: - description: "" type: string nomEquipementVirtuel: - description: "" type: string nomApplication: type: string @@ -664,143 +786,37 @@ components: type: number format: double qualite: - description: "Qualité de la donnée" type: string - IndicateurImpactMessagerieRest: - description: Indicateur d'impact de messagerie + description: Qualité de la donnée + description: Impact d'application + ApplicationRest: + type: object properties: - dateCalcul: + nomApplication: type: string - description: "Date et Heure du calcul, même valeur pour tous les indicateurs\ - \ créés avec le même lot d'objets d'entrées" - format: date-time - versionCalcul: + typeEnvironnement: type: string - critere: + nomEquipementVirtuel: type: string - description: "Nom du critère associé à l'indicateur, peut être null pour\ - \ certains indicateurs" - statutIndicateur: + nomEquipementPhysique: type: string - description: "Statut de l'indicateur, vaut \"OK\" si l'indicateur est calcul\ - \ et \"ERREUR\" si l'indicateur est en erreur" - trace: + domaine: type: string - description: Trace du calcul ayant produit l'indicateur - unite: + sousDomaine: type: string - description: "Unite du critère associé, peut être null" - impactMensuel: - type: number - format: double - moisAnnee: - type: integer - volumeTotalMailEmis: - type: number - format: double - nombreMailEmis: - type: number - format: double - - - # Demandes de calculs unitaires - DemandeCalculImpactEquipementPhysiqueRest: - description: - Demande de calcul d'impact d'équipement physique. - Contient tous les éléments nécéssaire au calcul d'impact (équipement physique, référentiels) - properties: - equipementPhysique: - $ref: "#/components/schemas/EquipementPhysiqueRest" - typeEquipement: - $ref: "#/components/schemas/TypeEquipementRest" - correspondanceRefEquipement: - $ref: "#/components/schemas/CorrespondanceRefEquipementRest" - hypotheses: - type: array - items: - $ref: "#/components/schemas/HypotheseRest" - etape: - $ref: "#/components/schemas/EtapeRest" - critere: - $ref: "#/components/schemas/CritereRest" - mixElectriques: - description: Mix électrique du pays d'utilisation de l'équipement physique - type: array - items: - $ref: "#/components/schemas/MixElectriqueRest" - impactEquipements: - description: | - Référentiels des Critères d'impact d'équipements. - La liste ne peut contenir maximum 2 entrées : - - 1 pour la référence par défaut (typeEquipement.refEquipementParDefaut) - - 1 pour la correspondance cible (correspondanceRefEquipement.refEquipementCible) - type: array - items: - $ref: "#/components/schemas/ImpactEquipementRest" - DemandeCalculImpactReseauEquipementPhysiqueRest: - description: | - Demande de calcul d'impact d'équipement physique. - Contient tous les éléments nécéssaire au calcul d'impact (équipement physique, référentiels) - properties: - equipementPhysique: - $ref: "#/components/schemas/EquipementPhysiqueRest" - etape: - $ref: "#/components/schemas/EtapeRest" - critere: - $ref: "#/components/schemas/CritereRest" - impactsReseau: - description: | - Référentiels des Critères d'impact réseau. - La référence réseau doit être "impactReseauMobileMoyen". - type: array - maxItems: 1 - items: - $ref: "#/components/schemas/ImpactReseauRest" - DemandeCalculEquipementVirtuelRest: - description: Objet regroupant toutes les données nécessaires au calcul unitaire d'indicateur d'impact écologique pour un équipement virtuel. - required: - - equipementVirtuel - - impactEquipement - properties: - equipementVirtuel: - $ref: "#/components/schemas/EquipementVirtuelRest" - nbTotalVCPU: - description: | - Nombre total de CPU virtuels sur l'équipement physique parent. - Si renseigné, sera utilisé en priorité. - Ne sera utilisé que si le type d'équipement virtuel n'est pas "calcul". - type: integer - nbEquipementsVirtuels: - description: | - Nombre total d'équipements virtuels sur l'équipement physique parent. - type: integer - stockageTotalVirtuel: - description: | - Stockage total en To pour tous les équipements virtuels sur l'équipement physique parent. - Ne sera utilisé que si le type d'équipement virtuel n'est pas "stockage". - type: number - format: double - impactEquipement: - $ref: "#/components/schemas/IndicateurImpactEquipementPhysiqueRest" + qualite: + type: string + description: Qualité de la donnée + description: Représentation d'une application dans NumEcoEval DemandeCalculApplicationRest: - description: Demande de calcul unitaire d'indicateur d'impact écologique pour une application + type: object properties: application: - $ref: "#/components/schemas/ApplicationRest" + $ref: '#/components/schemas/ApplicationRest' nbApplications: - description: Nombre d'applications rattachées à l'équipement virtuel portant l'application type: integer + description: Nombre d'applications rattachées à l'équipement virtuel portant l'application + format: int32 impactEquipementVirtuel: - $ref: "#/components/schemas/IndicateurImpactEquipementVirtuelRest" - DemandeCalculMessagerieRest: - description: Objet regroupant toutes les données pour le calcul des indicateurs d'impact de messagerie dans NumEcoEval - type: object - properties: - messagerie: - $ref: "#/components/schemas/MessagerieRest" - critere: - $ref: "#/components/schemas/CritereRest" - impactsMessagerie: - type: array - items: - $ref: "#/components/schemas/ImpactMessagerieRest" \ No newline at end of file + $ref: '#/components/schemas/IndicateurImpactEquipementVirtuelRest' + description: Demande de calcul unitaire d'indicateur d'impact écologique pour une application diff --git a/services/common/src/main/resources/static/api-referentiels-openapi.yaml b/services/common/src/main/resources/static/api-referentiels-openapi.yaml index d54e47de85e61029ad6cc1e1138735dfc4290a38..d1e8b5da7c0b02e3e6f5e9ae2f7621f3aa51a4db 100644 --- a/services/common/src/main/resources/static/api-referentiels-openapi.yaml +++ b/services/common/src/main/resources/static/api-referentiels-openapi.yaml @@ -271,86 +271,6 @@ paths: application/hal+json: schema: $ref: '#/components/schemas/ErrorResponseDTO' - /referentiel/impactreseaux/csv: - get: - tags: - - Export Référentiels - summary: Exporter les impacts réseaux sous format csv - description: | - <ul> - <li>Entrée : Aucune </li> - <li>Sortie : Renvoie la liste des étapes de ref_ImpactReseau </li> - </ul> - operationId: exportImpactReseauxCSV - responses: - '200': - description: OK - '400': - description: Bad Request - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '404': - description: Not Found - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '500': - description: Internal Server Error - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - post: - tags: - - Import Référentiels - summary: 'Alimentation du référentiel ImpactReseau par csv : annule et remplace.' - description: | - Le référentiel est global à tout le système. L’import se fait uniquement avec un fichier CSV. - Lors de l’import, les données précédentes sont supprimées. - <ul> - <li>Entrée : Le fichier CSV du référentiel</li> - <li>Sortie : Rapport du fichier CSV (nombre de lignes totales, nombre de lignes en erreur, nombre de lignes traitées, liste des erreurs par lignes).</li> - </ul> - operationId: importImpactReseauxCSV - requestBody: - content: - multipart/form-data: - schema: - required: - - file - type: object - properties: - file: - type: string - format: binary - responses: - '200': - description: Rapport d'import du fichier CSV - content: - application/hal+json: - schema: - $ref: '#/components/schemas/RapportImportDTO' - '400': - description: Invalid request - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '404': - description: Not Found - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '500': - description: Internal Server Error - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' /referentiel/impactequipements/csv: get: tags: @@ -1323,68 +1243,6 @@ paths: application/hal+json: schema: $ref: '#/components/schemas/ErrorResponseDTO' - /referentiel/impactreseaux: - get: - tags: - - Interne NumEcoEval - summary: Endpoint interne à NumEcoEval - Récupération d'un Impact Réseau - description: | - Endpoint interne utilisé dans la génération des indicateurs par le module api-calcul de NumEcoEval. - Récupération d'un impact écologique vis à vis de l'usage du réseau en fonction de 3 paramètres: - <ul> - <li>La référence d'impact réseau: refReseau</li> - <li>Le critère d'impact: critere</li> - <li>L'étape ACV: etapeACV</li> - </ul> - . - operationId: getImpactReseau - parameters: - - name: refReseau - in: query - description: Référence de réseau recherché - required: true - schema: - type: string - description: Référence de réseau recherché - - name: critere - in: query - description: Nom du critère d'impact écologique - required: true - schema: - type: string - description: Nom du critère d'impact écologique - - name: etapeacv - in: query - description: Code de l'étape ACV - required: true - schema: - type: string - description: Code de l'étape ACV - responses: - '200': - description: impact reseau trouvé - content: - application/json: - schema: - $ref: '#/components/schemas/ImpactReseauDTO' - '400': - description: Invalid request - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '404': - description: Impact Reseau non trouvé - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' - '500': - description: Internal Server Error - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ErrorResponseDTO' /referentiel/impactequipements: get: tags: @@ -1594,7 +1452,7 @@ paths: operationId: getAllEtapes responses: '200': - description: etape acv non trouvé + description: Etapes acv trouvées content: application/json: schema: @@ -1608,7 +1466,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponseDTO' '404': - description: Impact Reseau non trouvé + description: Etapes acv non trouvées content: application/json: schema: @@ -1629,7 +1487,7 @@ paths: operationId: getAllCriteres responses: '200': - description: impact reseau trouvé + description: Critères trouvés content: application/json: schema: @@ -1643,7 +1501,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponseDTO' '404': - description: Impact Reseau non trouvé + description: Critères non trouvés content: application/json: schema: @@ -1900,34 +1758,6 @@ components: type: string description: Source de l'impact écologique d'une messagerie description: Référentiel de l'impact écologique d'une messagerie. La clé est le champ critere. Chaque entrée représente les composants d'une fonction affine (Ax+b). - ImpactReseauDTO: - type: object - properties: - refReseau: - type: string - description: Référence de l'usage du réseau, fait partie de la clé du référentiel - etapeACV: - type: string - description: Étape ACV concerné pour l'usage du réseau, fait partie de la clé du référentiel - critere: - type: string - description: Critère d'impact écologique concerné pour l'usage du réseau, fait partie de la clé du référentiel - unite: - type: string - description: Unité de l'impact écologique concerné pour l'usage du réseau. Champ Déprécié - deprecated: true - source: - type: string - description: Source de l'impact écologique - valeur: - type: number - description: Valeur de l'impact écologique - format: double - consoElecMoyenne: - type: number - description: Consommation électrique moyenne de l'impact écologique - format: double - description: Référentiel de l'impact écologique d'un équipement physique vis à vis de l'usage du réseau dans les référentiels. La clé est composé des champs refReseau, etapeACV et critere. ImpactEquipementDTO: type: object properties: diff --git a/services/common/src/main/resources/static/asyncapi_equipement_physique.yaml b/services/common/src/main/resources/static/asyncapi_equipement_physique.yaml index bb8585f9453907814c04fc1cfef4f2aa44ed1df8..c6114ca7e8452d7e7e378ca8d2cf9194625e8eb3 100644 --- a/services/common/src/main/resources/static/asyncapi_equipement_physique.yaml +++ b/services/common/src/main/resources/static/asyncapi_equipement_physique.yaml @@ -71,11 +71,6 @@ components: type: array items: $ref: "#/components/schemas/MixElectriqueDTO" - impactsReseau: - description: Référentiels des Critères d'impact écologiques - type: array - items: - $ref: "#/components/schemas/ImpactReseauDTO" impactsEquipement: description: Référentiels d'impacts écologiques pour cet équipement type: array @@ -141,14 +136,6 @@ components: nomCourtDatacenter: description: "" type: string - nbJourUtiliseAn: - description: "" - type: number - format: double - goTelecharge: - description: "" - type: number - format: float quantite: description: "" type: number @@ -304,26 +291,6 @@ components: source: type: string description: Référentiel de critère d'impact écologique - ImpactReseauDTO: - type: object - properties: - refReseau: - type: string - etapeACV: - type: string - critere: - type: string - unite: - type: string - source: - type: string - valeur: - type: number - format: double - consoElecMoyenne: - type: number - format: double - description: Référentiel d'impact écologique pour l'usage du réseau par un équipement ImpactEquipementDTO: type: object properties: