From 58c983159e12af3ec0bfabe18446394f4b771486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tandeau=20De=20Marsac=20Guyl=C3=A8ne?= Date: Wed, 19 Nov 2025 16:26:38 +0100 Subject: [PATCH] feat: for geo/qpv/{code}/intersections --- ...itaireDeLaPolitiqueDeLaVilleEndpoints.java | 13 ++++ ...rioritairesDeLaPolitiqueDeLaVilleTest.java | 53 +++++++++++++++- .../src/main/resources/openapi-diffusion.yaml | 63 ++++++++++++++++++- 3 files changed, 125 insertions(+), 4 deletions(-) diff --git a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/api/GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints.java b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/api/GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints.java index 195076f3..919d0b5e 100644 --- a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/api/GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints.java +++ b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/api/GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints.java @@ -1,8 +1,12 @@ package fr.insee.rmes.magma.diffusion.api; import fr.insee.rmes.magma.diffusion.api.requestprocessor.RequestProcessor; +import fr.insee.rmes.magma.diffusion.model.Canton; import fr.insee.rmes.magma.diffusion.model.QuartierPrioritaireDeLaPolitiqueDeLaVille2024; +import fr.insee.rmes.magma.diffusion.model.TerritoireBaseRelation; +import fr.insee.rmes.magma.diffusion.model.TypeEnum; import fr.insee.rmes.magma.diffusion.queries.parameters.TerritoireRequestParametizer; +import fr.insee.rmes.magma.diffusion.queries.parameters.TerritoiresLiesRequestParametizer; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -35,5 +39,14 @@ public ResponseEntity> getco .toResponseEntity(); } + @Override + public ResponseEntity> getcogqpvintersect (String code, LocalDate date, TypeEnum type) { + return requestProcessor.queryToFindIntersections() + .with(new TerritoiresLiesRequestParametizer(code, date, type, QuartierPrioritaireDeLaPolitiqueDeLaVille2024.class)) + .executeQuery() + .listResult(TerritoireBaseRelation.class) + .toResponseEntity(); + } + } diff --git a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest.java b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest.java index 43215521..61e8e081 100644 --- a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest.java +++ b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest.java @@ -2,6 +2,8 @@ import fr.insee.rmes.magma.diffusion.api.GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints; import fr.insee.rmes.magma.diffusion.model.QuartierPrioritaireDeLaPolitiqueDeLaVille2024; +import fr.insee.rmes.magma.diffusion.model.TerritoireBaseRelation; +import fr.insee.rmes.magma.diffusion.model.TypeEnum; import fr.insee.rmes.magma.diffusion.model.TypeEnumAscendantsCommune; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; @@ -36,7 +38,7 @@ class GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest extends TestcontainerTe // geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QN06255M?date=2025-09-04 @Test - void should_return_quartierPrioritaireDeLaVilleCode_QN06255M_when_codeQN06255M_date20250904() { + void should_return_quartierPrioritaireDeLaVilleCode_when_codeQN06255M_date20250904() { var response = endpoints.getcogqpv("QN06255M", LocalDate.of(2025, 9, 4)); var result = response.getBody(); Assertions.assertNotNull(result); @@ -73,7 +75,7 @@ void should_return_400_when_CommuneCodeAscendants_codeQJ08255M_date20250904() th // geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024?date=2025-09-04// @Test - void should_return_1609_QPV_when_quartierPrioritaireDeLaPolitiqueDeLaVille2024_date20250904() { + void should_return_1609_QPV_when_quartiersPrioritairesDeLaPolitiqueDeLaVille2024_date20250904() { var response = endpoints.getcogqpvliste(LocalDate.of(2025,9,4)); var result = response.getBody(); Assertions.assertNotNull(result); @@ -91,4 +93,51 @@ void should_return_1609_QPV_when_quartierPrioritaireDeLaPolitiqueDeLaVille2024_d ); } + /// //////////////////////////////////////////////////////////////////////////// + /// geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024/{code}/intersections /// + /// //////////////////////////////////////////////////////////////////////////// + +// geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024/QN08255M/intersections?date=2025-09-04// + @Test + void should_return_1_commune_when_quartierPrioritaireDeLaPolitiqueDeLaVille2024CodeIntersections_codeQN06255M_date20250904_typeNull() { + var response = endpoints.getcogqpvintersect("QN06255M", LocalDate.of(2025,9,4), null); + var result = response.getBody(); + Assertions.assertNotNull(result); + var resultItem1= result.getFirst(); + + assertAll( + () -> assertEquals(1, result.size()), + () -> assertEquals("62516", resultItem1.getCode()), + () -> assertEquals("http://id.insee.fr/geo/commune/2d740bbc-9c75-4fd5-b3f4-63fbab6f2713", resultItem1.getUri()), + () -> assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem1.getType()), + () -> assertEquals(LocalDate.of(1943,1,1), resultItem1.getDateCreation()), + () -> assertEquals("Lillers", resultItem1.getIntituleSansArticle()), + () -> assertEquals(TerritoireBaseRelation.TypeArticleEnum._0, resultItem1.getTypeArticle()), + () -> assertEquals("Lillers", resultItem1.getIntitule()), + () -> assertEquals("inclus", resultItem1.getRelation()) + ); + } + + // geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024/QN08255M/intersections?date=2025-09-04&type=commune// + @Test + void should_return_1_commune_when_quartierPrioritaireDeLaPolitiqueDeLaVille2024CodeIntersections_codeQN06255M_date20250904_typeCommune() { + var response = endpoints.getcogqpvintersect("QN06255M", LocalDate.of(2025,9,4), TypeEnum.COMMUNE); + var result = response.getBody(); + Assertions.assertNotNull(result); + var resultItem1= result.getFirst(); + + assertAll( + () -> assertEquals(1, result.size()), + () -> assertEquals("62516", resultItem1.getCode()), + () -> assertEquals("http://id.insee.fr/geo/commune/2d740bbc-9c75-4fd5-b3f4-63fbab6f2713", resultItem1.getUri()), + () -> assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem1.getType()), + () -> assertEquals(LocalDate.of(1943,1,1), resultItem1.getDateCreation()), + () -> assertEquals("Lillers", resultItem1.getIntituleSansArticle()), + () -> assertEquals(TerritoireBaseRelation.TypeArticleEnum._0, resultItem1.getTypeArticle()), + () -> assertEquals("Lillers", resultItem1.getIntitule()), + () -> assertEquals("inclus", resultItem1.getRelation()) + ); + } + + } diff --git a/magma-oas/src/main/resources/openapi-diffusion.yaml b/magma-oas/src/main/resources/openapi-diffusion.yaml index bdfe98ea..3fc9db62 100644 --- a/magma-oas/src/main/resources/openapi-diffusion.yaml +++ b/magma-oas/src/main/resources/openapi-diffusion.yaml @@ -1770,7 +1770,7 @@ paths: operationId: 'getcogqpv' parameters: - $ref: '#/components/parameters/codeQPVInPath' - - $ref: '#/components/parameters/dateQPVActive' + - $ref: '#/components/parameters/dateQPVActif' responses: '200': $ref: '#/components/responses/QuartierPrioritaireDeLaPolitiqueDeLaVille200' @@ -1803,6 +1803,28 @@ paths: '500': $ref: '#/components/responses/ServerError' + /geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/{code}/intersections: + get: + tags: + - geoQuartierPrioritaireDeLaPolitiqueDeLaVille + summary: 'Informations concernant les territoires directement liés au quartier prioritaire de la politique de la ville' + operationId: 'getcogqpvintersect' + parameters: + - $ref: '#/components/parameters/codeQPVInPath' + - $ref: '#/components/parameters/dateQPVActif' + - $ref: '#/components/parameters/typeTerritoireLieAQuartierPrioritaireDeLaPolitiqueDeLaVille' + responses: + '200': + $ref: '#/components/responses/QuartierPrioritaireDeLaPolitiqueDeLaVilleListeTerritoiresLies200' + '400': + $ref: '#/components/responses/IncorrectRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '500': + $ref: '#/components/responses/ServerError' + /geo/region/{code}: get: tags: @@ -2854,7 +2876,7 @@ components: schema: $ref: '#/components/schemas/CodeReg' - dateQPVActive: + dateQPVActif: in: query description: |- Filtre pour renvoyer le quartier prioritaire de la politique de la ville actif à la date donnée. Par défaut, c’est la date courante (format : 'AAAA-MM-JJ') @@ -2872,6 +2894,13 @@ components: type: 'string' format: date + typeTerritoireLieAQuartierPrioritaireDeLaPolitiqueDeLaVille: + name: 'type' + in: query + description: 'Filtre sur le type de territoire renvoyé' + schema: + $ref: '#/components/schemas/TypeEnum' + dateRegionActive: in: query description: |- @@ -4524,6 +4553,18 @@ components: typeArticle: 'X' intitule: 'Grande Reyssouze Terre Des Fleurs' + QuartierPrioritaireDeLaPolitiqueDeLaVilleListeTerritoiresLies200ListeTerritoiresLies: + value: + - code: '62516' + uri: 'http://id.insee.fr/geo/commune/2d740bbc-9c75-4fd5-b3f4-63fbab6f2713' + type: 'Commune' + dateCreation: '1943-01-01' + intituleSansArticle: 'Lillers' + typeArticle: '0' + intitule: 'Lillers' + relation: 'inclus' + + Region: value: code: '06' @@ -5986,6 +6027,24 @@ components: défaut: $ref: '#/components/examples/ListeQuartiersPrioritairesDeLaPolitiqueDeLaVille' + QuartierPrioritaireDeLaPolitiqueDeLaVilleListeTerritoiresLies200: + description: 'Opération réussie pour les territoires liés au quartier prioritaire de la politique de la ville' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TerritoireBase_Relation' + examples: + défaut: + $ref: '#/components/examples/QuartierPrioritaireDeLaPolitiqueDeLaVilleListeTerritoiresLies200ListeTerritoiresLies' + application/xml: + schema: + $ref: '#/components/schemas/TerritoireBase_Relation' + examples: + défaut: + $ref: '#/components/examples/QuartierPrioritaireDeLaPolitiqueDeLaVilleListeTerritoiresLies200ListeTerritoiresLies' + Region200: description: 'Opération réussie pour la région' content: