diff --git a/magma-app/src/main/java/fr/insee/rmes/config/OpenApiYamlConfig.java b/magma-app/src/main/java/fr/insee/rmes/config/OpenApiYamlConfig.java new file mode 100644 index 000000000..e8cacbdee --- /dev/null +++ b/magma-app/src/main/java/fr/insee/rmes/config/OpenApiYamlConfig.java @@ -0,0 +1,118 @@ +package fr.insee.rmes.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.StreamUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@RestController +public class OpenApiYamlConfig { + + private static final String VERSION_GESTION = "2.0.0"; + private static final String VERSION_DIFFUSION = "2.0.0"; + + @Value("${fr.insee.rmes.magma.display.geo:true}") + private boolean displayGeo; + + @GetMapping(value = "/openapi.yaml", produces = "text/plain;charset=UTF-8") + public ResponseEntity openApiYaml() throws IOException { + String gestionContent = loadYamlWithVersion("openapi-gestion.yaml", VERSION_GESTION); + String diffusionContent = loadYamlWithVersion("openapi-diffusion.yaml", VERSION_DIFFUSION); + + Yaml yaml = new Yaml(); + Map gestion = yaml.load(gestionContent); + Map diffusion = yaml.load(diffusionContent); + + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setPrettyFlow(true); + Yaml dumper = new Yaml(options); + + return ResponseEntity.ok() + .contentType(MediaType.TEXT_PLAIN) + .body(dumper.dump(buildMergedYaml(gestion, diffusion))); + } + + private String loadYamlWithVersion(String fileName, String version) throws IOException { + String content = StreamUtils.copyToString(new ClassPathResource(fileName).getInputStream(), StandardCharsets.UTF_8); + return content.replace("${version}", version); + } + + @SuppressWarnings("unchecked") + private Map buildMergedYaml(Map gestion, Map diffusion) { + Map merged = new LinkedHashMap<>(); + merged.put("openapi", "3.1.0"); + merged.put("info", buildInfo(gestion)); + if (diffusion.containsKey("externalDocs")) { + merged.put("externalDocs", diffusion.get("externalDocs")); + } + merged.put("servers", gestion.get("servers")); + merged.put("security", gestion.get("security")); + merged.put("tags", mergeTags(gestion, diffusion)); + merged.put("paths", mergePaths(gestion, diffusion)); + merged.put("components", mergeComponents( + (Map) gestion.getOrDefault("components", Collections.emptyMap()), + (Map) diffusion.getOrDefault("components", Collections.emptyMap()))); + return merged; + } + + @SuppressWarnings("unchecked") + private Map buildInfo(Map gestion) { + Map info = new LinkedHashMap<>((Map) gestion.get("info")); + info.put("title", "Magma API"); + info.put("description", "API Gestion et Diffusion des métadonnées de l'Insee"); + info.put("version", "Gestion " + VERSION_GESTION + " / Diffusion " + VERSION_DIFFUSION); + return info; + } + + @SuppressWarnings("unchecked") + private List> mergeTags(Map gestion, Map diffusion) { + List> gestionTags = (List>) gestion.getOrDefault("tags", Collections.emptyList()); + List> diffusionTags = (List>) diffusion.getOrDefault("tags", Collections.emptyList()); + return Stream.concat(gestionTags.stream(), diffusionTags.stream()) + .filter(tag -> displayGeo || !((String) tag.get("name")).startsWith("geo")) + .collect(Collectors.toList()); + } + + @SuppressWarnings("unchecked") + private Map mergePaths(Map gestion, Map diffusion) { + Map mergedPaths = new LinkedHashMap<>(); + mergedPaths.putAll((Map) gestion.getOrDefault("paths", Collections.emptyMap())); + ((Map) diffusion.getOrDefault("paths", Collections.emptyMap())).forEach((path, value) -> { + if (displayGeo || !path.startsWith("/geo")) { + mergedPaths.put(path, value); + } + }); + return mergedPaths; + } + + @SuppressWarnings("unchecked") + private Map mergeComponents(Map gestion, Map diffusion) { + Map result = new LinkedHashMap<>(); + Set allKeys = new LinkedHashSet<>(gestion.keySet()); + allKeys.addAll(diffusion.keySet()); + for (String key : allKeys) { + if (gestion.containsKey(key) && diffusion.containsKey(key)) { + Map mergedSection = new LinkedHashMap<>(); + mergedSection.putAll((Map) gestion.get(key)); + mergedSection.putAll((Map) diffusion.get(key)); + result.put(key, mergedSection); + } else { + result.put(key, gestion.getOrDefault(key, diffusion.get(key))); + } + } + return result; + } + +} \ No newline at end of file diff --git a/magma-app/src/main/resources/magma-app.properties b/magma-app/src/main/resources/magma-app.properties index 717b7ffad..798414467 100644 --- a/magma-app/src/main/resources/magma-app.properties +++ b/magma-app/src/main/resources/magma-app.properties @@ -6,6 +6,7 @@ fr.insee.rmes.magma.force.ssl=false springdoc.swagger-ui.path= / fr.insee.rmes.security.enabled=true springdoc.swagger-ui.enabled=true +springdoc.swagger-ui.url=/openapi.yaml spring.profile.active=dev fr.insee.rmes.magma.bauhaus.url= @@ -27,7 +28,7 @@ fr.insee.rmes.springdoc.issuer-description=Keycloak fr.insee.rmes.springdoc.contact-name=DR59-SNDIL fr.insee.rmes.springdoc.contact-email=un-email-fonctionnel@insee.fr fr.insee.rmes.springdoc.contact-url=https://www.insee.fr/fr/accueil -fr.insee.rmes.security.whitelist-matchers=/swagger-ui/index.html,/v3/api-docs/**,/swagger-ui/**,/swagger-ui.html,/actuator/**,/error,/,/swagger-ui-magma.html +fr.insee.rmes.security.whitelist-matchers=/swagger-ui/index.html,/v3/api-docs/**,/swagger-ui/**,/swagger-ui.html,/actuator/**,/error,/,/swagger-ui-magma.html,/openapi.yaml,/*.schema.json #Configuration du jeton JWT # Security configuration @@ -109,10 +110,12 @@ fr.insee.rmes.magma.links.baseURI = documents/page #ONTOLOGIES fr.insee.rmes.magma.ontologies.baseURI = ontologies/insee/base -## propriétées magma diffusion +## propriétés magma fr.insee.rmes.magma.api.sparqlEndpoint= fr.insee.rmes.magma.api.freemarker.locale-language=fr properties.logger.prefix-for-properties=fr.insee,debug, trace, info, logging, spring, server, keycloak, application, management, springdoc, properties, minio, elastic spring.jackson.mapper.sort-properties-alphabetically=false fr.insee.rmes.magma.api.geographie.types-autorises=Commune,CommuneAssociee,CommuneDeleguee,Canton,CantonOuVille,Arrondissement,ArrondissementMunicipal,Departement,Pays,Region,Intercommunalite,District,AireDAttractionDesVilles2020,BassinDeVie2022,CollectiviteDOutreMer,CirconscriptionTerritoriale,Iris,QuartierPrioritaireDeLaPolitiqueDeLaVille2024,ZoneDEmploi2020,UniteUrbaine2020 +## affichage des end-points géographie (/geo) dans le Swagger +fr.insee.rmes.magma.display.geo=false diff --git a/magma-diffusion-impl/src/main/resources/application.properties b/magma-diffusion-impl/src/main/resources/application.properties index d53585bf8..17af9db00 100644 --- a/magma-diffusion-impl/src/main/resources/application.properties +++ b/magma-diffusion-impl/src/main/resources/application.properties @@ -1,4 +1,8 @@ fr.insee.rmes.magma.api.sparqlEndpoint= +#springdoc.swagger-ui.urls[0].url=/openapi-diffusion.yaml +#springdoc.swagger-ui.urls[0].name=API Diffusion +#springdoc.swagger-ui.urls[1].url=/openapi-gestion.yaml +#springdoc.swagger-ui.urls[1].name=API Gestion fr.insee.rmes.magma.api.freemarker.locale-language=fr properties.logger.prefix-for-properties=fr,debug, trace, info, logging, spring, server, management, springdoc, properties spring.jackson.mapper.sort-properties-alphabetically=false diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/DatasetsEndpoints.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/DatasetsEndpoints.java index a0a38288e..4bc3b4056 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/DatasetsEndpoints.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/DatasetsEndpoints.java @@ -1,12 +1,11 @@ package fr.insee.rmes.magma.gestion.api; import fr.insee.rmes.magma.gestion.api.requestprocessor.RequestProcessorGestion; -import fr.insee.rmes.magma.gestion.model.DataSet; +import fr.insee.rmes.magma.gestion.model.Dataset; import fr.insee.rmes.magma.gestion.model.Distribution; import fr.insee.rmes.magma.gestion.queries.parameters.DatasetsRequestParametizer; import fr.insee.rmes.magma.gestion.services.DatasetsService; import fr.insee.rmes.magma.gestion.utils.DatasetByIdDTO; -import fr.insee.rmes.magma.gestion.utils.DatasetByIdSummaryDTO; import fr.insee.rmes.magma.gestion.utils.DatasetDTO; import fr.insee.rmes.magma.gestion.utils.DistributionDTO; import org.springframework.http.ResponseEntity; @@ -27,19 +26,19 @@ public DatasetsEndpoints(RequestProcessorGestion requestProcessor, DatasetsServi } @Override - public ResponseEntity> getListDatasets(@Nullable String dateMiseAJour) { + public ResponseEntity> getListDatasets(@Nullable String dateMiseAJour) { List dtos = requestProcessor.queryToFindAllDatasets() .with(new DatasetsRequestParametizer(dateMiseAJour)) .executeQuery() .listResult(DatasetDTO.class) .result(); - List dataSets = datasetsService.transformDatasetDTOsToDataSets(dtos); + List dataSets = datasetsService.transformDatasetDTOsToDataSets(dtos); return ResponseEntity.ok(dataSets); } @Override - public ResponseEntity getDataSetById(String id) { + public ResponseEntity getDataSetById(String id) { DatasetByIdDTO dto = requestProcessor.queryToFindDatasetById() .with(new DatasetsRequestParametizer(id, null)) .executeQuery() diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/SeriesOperationsEndpoints.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/SeriesOperationsEndpoints.java index a8e9fe3c8..11b733d7a 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/SeriesOperationsEndpoints.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/api/SeriesOperationsEndpoints.java @@ -2,8 +2,9 @@ import fr.insee.rmes.magma.gestion.api.requestprocessor.RequestProcessorGestion; import fr.insee.rmes.magma.gestion.model.Indicateur; -import fr.insee.rmes.magma.gestion.model.OperationById; -import fr.insee.rmes.magma.gestion.model.SerieById; +import fr.insee.rmes.magma.gestion.model.Operation; +import fr.insee.rmes.magma.gestion.model.Serie; +import fr.insee.rmes.magma.gestion.old.model.operation.OperationById; import fr.insee.rmes.magma.gestion.queries.parameters.IndicateurRequestParametizer; import fr.insee.rmes.magma.gestion.queries.parameters.SeriesOperationsRequestParametizer; import fr.insee.rmes.magma.gestion.services.SeriesOperationsService; @@ -28,19 +29,19 @@ public SeriesOperationsEndpoints(RequestProcessorGestion requestProcessor, Serie } @Override - public ResponseEntity> getAllSeries(String dateMiseAJour) { + public ResponseEntity> getAllSeries(String dateMiseAJour) { String date = dateMiseAJour != null ? dateMiseAJour : "none"; List dtos = requestProcessor.queryToFindAllSeries() .with(new SeriesOperationsRequestParametizer(null, null, date)) .executeQuery() .listResult(SeriesDTO.class) .result(); - List series = seriesOperationsService.transformSeriesDTOsToSeries(dtos); + List series = seriesOperationsService.transformSeriesDTOsToSeries(dtos); return ResponseEntity.ok(series); } @Override - public ResponseEntity getSerieById(String id) { + public ResponseEntity getSerieById(String id) { SeriesDTO seriesDTO = requestProcessor.queryToFindSerieById() .with(new SeriesOperationsRequestParametizer(id, null)) .executeQuery() @@ -49,12 +50,12 @@ public ResponseEntity getSerieById(String id) { if (seriesDTO == null) { return ResponseEntity.notFound().build(); } - SerieById serieById = seriesOperationsService.transformSeriesDTOToSerieById(seriesDTO); + Serie serieById = seriesOperationsService.transformSeriesDTOToSerieById(seriesDTO); return EndpointsUtils.toResponseEntity(serieById); } @Override - public ResponseEntity getOperationByCode(String id) { + public ResponseEntity getOperationByCode(String id) { OperationDTO operationDTO = requestProcessor.queryToFindOperationByCode() .with(new SeriesOperationsRequestParametizer(null, id)) .executeQuery() @@ -63,8 +64,8 @@ public ResponseEntity getOperationByCode(String id) { if (operationDTO == null) { return ResponseEntity.notFound().build(); } - OperationById operationById = seriesOperationsService.transformOperationDTOToOperationById(operationDTO); - return EndpointsUtils.toResponseEntity(operationById); + Operation operation = seriesOperationsService.transformOperationDTOToOperation(operationDTO); + return EndpointsUtils.toResponseEntity(operation); } @Override diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsService.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsService.java index 3b3b5cc14..462da54af 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsService.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsService.java @@ -1,9 +1,8 @@ package fr.insee.rmes.magma.gestion.services; -import fr.insee.rmes.magma.gestion.model.DataSet; +import fr.insee.rmes.magma.gestion.model.Dataset; import fr.insee.rmes.magma.gestion.model.Distribution; import fr.insee.rmes.magma.gestion.utils.DatasetByIdDTO; -import fr.insee.rmes.magma.gestion.utils.DatasetByIdSummaryDTO; import fr.insee.rmes.magma.gestion.utils.DatasetDTO; import fr.insee.rmes.magma.gestion.utils.DistributionDTO; @@ -11,9 +10,9 @@ public interface DatasetsService { - List transformDatasetDTOsToDataSets(List dtos); + List transformDatasetDTOsToDataSets(List dtos); - DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto); + Dataset transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto); List transformDistributionDTOsToDistributions(List dtos); diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsServiceImpl.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsServiceImpl.java index 4878783da..dabef6ef6 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsServiceImpl.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/DatasetsServiceImpl.java @@ -2,17 +2,12 @@ import fr.insee.rmes.magma.gestion.model.*; import fr.insee.rmes.magma.gestion.utils.DatasetByIdDTO; -import fr.insee.rmes.magma.gestion.utils.DatasetByIdSummaryDTO; import fr.insee.rmes.magma.gestion.utils.DatasetDTO; import fr.insee.rmes.magma.gestion.utils.DistributionDTO; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static fr.insee.rmes.magma.gestion.utils.LocalisedLabelUtils.createLangueContenu; import static fr.insee.rmes.magma.gestion.utils.LocalisedLabelUtils.createListLangueContenu; @@ -21,12 +16,12 @@ public class DatasetsServiceImpl implements DatasetsService { @Override - public List transformDatasetDTOsToDataSets(List dtos) { + public List transformDatasetDTOsToDataSets(List dtos) { return dtos.stream().map(this::transformDatasetDTOToDataSet).toList(); } - private DataSet transformDatasetDTOToDataSet(DatasetDTO dto) { - DataSet dataSet = new DataSet(); + private Dataset transformDatasetDTOToDataSet(DatasetDTO dto) { + Dataset dataSet = new Dataset(); dataSet.setLandingPage(null); dataSet.setModified(null); @@ -77,8 +72,8 @@ private DataSet transformDatasetDTOToDataSet(DatasetDTO dto) { } @Override - public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { - DataSet dataSet = new DataSet(); + public Dataset transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { + Dataset dataSet = new Dataset(); dataSet.setLandingPage(null); dataSet.setModified(null); @@ -165,8 +160,8 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { } if (StringUtils.hasText(dto.landingPageLg1())) { dataSet.setLandingPage(createListLangueContenu( - new DataSetLandingPageInner().lang("fr").url(dto.landingPageLg1()), - new DataSetLandingPageInner().lang("en").url(dto.landingPageLg2()))); + new DatasetLandingPageInner().lang("fr").url(dto.landingPageLg1()), + new DatasetLandingPageInner().lang("en").url(dto.landingPageLg2()))); } if (dto.keywordLg1() != null && dto.keywordLg2() != null){ @@ -174,7 +169,7 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { } if (StringUtils.hasText(dto.idPublisher())) { - dataSet.setPublisher(new DataSetCreatorInner() + dataSet.setPublisher(new DatasetCreatorInner() .id(dto.idPublisher()) .label(createListLangueContenu( createLangueContenu(dto.labelPublisherLg1(),"fr"), @@ -199,7 +194,7 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { if (StringUtils.hasText(dto.spatialId())) { - dataSet.setSpatial(new DataSetCreatorInner() + dataSet.setSpatial(new DatasetCreatorInner() .id(dto.spatialId()) .label(createListLangueContenu( createLangueContenu(dto.labelspatialLg1(),"fr"), @@ -207,13 +202,13 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { } if (StringUtils.hasText(dto.startPeriod())) { - dataSet.setTemporal(new DataSetTemporal() + dataSet.setTemporal(new DatasetTemporal() .startPeriod(dto.startPeriod()) .endPeriod(dto.endPeriod())); } if (StringUtils.hasText(dto.structureUri())) { - dataSet.setStructure(new DataSetStructure() + dataSet.setStructure(new DatasetStructure() .uri(dto.structureUri()) .id(dto.structureId()) .dsd(dto.dsd())); @@ -224,7 +219,7 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { .filter(s -> !s.isBlank()) .map(raw -> { String[] parts = raw.split("\\$", -1); - return new DataSetCreatorInner() + return new DatasetCreatorInner() .id(parts.length > 0 ? parts[0] : null) .label(createListLangueContenu( createLangueContenu(parts.length > 1 ? parts[1] : null, "fr"), @@ -236,14 +231,14 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { if (StringUtils.hasText(dto.operationStat())) { dataSet.setWasGeneratedBy(Arrays.stream(dto.operationStat().split(",")) .filter(s -> !s.isBlank()) - .map(uri -> new DataSetCreatorInner().id(uri)) + .map(uri -> new DatasetCreatorInner().id(uri)) .toList()); } if (StringUtils.hasText(dto.names())) { dataSet.setTheme(Arrays.stream(dto.names().split(",")) .filter(s -> !s.isBlank()) - .map(uri -> new DataSetThemeInner().uri(uri)) + .map(uri -> new DatasetThemeInner().uri(uri)) .toList()); } @@ -256,12 +251,12 @@ public DataSet transformDatasetByIdDTOToDataSet(DatasetByIdDTO dto) { if (StringUtils.hasText(dto.archiveUnits())) { dataSet.setArchiveUnit(Arrays.stream(dto.archiveUnits().split(",")) .filter(s -> !s.isBlank()) - .map(uri -> new DataSetCreatorInner().id(uri)) + .map(uri -> new DatasetCreatorInner().id(uri)) .toList()); } if (StringUtils.hasText(dto.wasDerivedFromS())) { - DataSetWasDerivedFrom wasDerivedFrom = new DataSetWasDerivedFrom() + DatasetWasDerivedFrom wasDerivedFrom = new DatasetWasDerivedFrom() .datasets(Arrays.stream(dto.wasDerivedFromS().split(",")) .filter(s -> !s.isBlank()) .toList()); diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsService.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsService.java index 02d166e20..b9f4905dd 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsService.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsService.java @@ -1,8 +1,8 @@ package fr.insee.rmes.magma.gestion.services; import fr.insee.rmes.magma.gestion.model.Indicateur; -import fr.insee.rmes.magma.gestion.model.OperationById; -import fr.insee.rmes.magma.gestion.model.SerieById; +import fr.insee.rmes.magma.gestion.model.Operation; +import fr.insee.rmes.magma.gestion.model.Serie; import fr.insee.rmes.magma.gestion.utils.IndicateurDTO; import fr.insee.rmes.magma.gestion.utils.OperationDTO; import fr.insee.rmes.magma.gestion.utils.SeriesDTO; @@ -10,8 +10,8 @@ import java.util.List; public interface SeriesOperationsService { - SerieById transformSeriesDTOToSerieById(SeriesDTO seriesDTO); - OperationById transformOperationDTOToOperationById(OperationDTO operationDTO); - List transformSeriesDTOsToSeries(List dtos); + Serie transformSeriesDTOToSerieById(SeriesDTO seriesDTO); + Operation transformOperationDTOToOperation(OperationDTO dto); + List transformSeriesDTOsToSeries(List dtos); Indicateur transformIndicateurDTOToIndicateur(IndicateurDTO indicateurDTO); } \ No newline at end of file diff --git a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImpl.java b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImpl.java index 48aadcb33..e757578d7 100644 --- a/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImpl.java +++ b/magma-gestion-impl/src/main/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImpl.java @@ -25,8 +25,8 @@ public class SeriesOperationsServiceImpl implements SeriesOperationsService { private String lg2; @Override - public SerieById transformSeriesDTOToSerieById(SeriesDTO dto) { - SerieById serieById = new SerieById(); + public Serie transformSeriesDTOToSerieById(SeriesDTO dto) { + Serie serieById = new Serie(); serieById.setSeriesId(dto.seriesId()); serieById.setUri(dto.series()); @@ -75,9 +75,9 @@ public SerieById transformSeriesDTOToSerieById(SeriesDTO dto) { } if (StringUtils.hasText(dto.sims()) ) { - StructureByIdAttributsInnerListCode rapportQualite = new StructureByIdAttributsInnerListCode(); + IdUri rapportQualite = new IdUri(); rapportQualite.setId(dto.simsId()); - rapportQualite.setUri(dto.sims()); + rapportQualite.setUri(URI.create(dto.sims())); serieById.setRapportQualite(rapportQualite); } @@ -95,51 +95,51 @@ public SerieById transformSeriesDTOToSerieById(SeriesDTO dto) { } @Override - public OperationById transformOperationDTOToOperationById(OperationDTO dto) { - OperationById operationById = new OperationById(); + public Operation transformOperationDTOToOperation(OperationDTO dto) { + Operation operation = new Operation(); - operationById.setId(dto.operationId()); - operationById.setUri(dto.operation()); - operationById.setMillesime(dto.temporal()); - operationById.setDateCreation(dto.created() != null ? dto.created() : null); - operationById.setDateMiseAJour(dto.modified() != null ? dto.modified() : null); - operationById.setStatutValidation(dto.validationState()); + operation.setId(dto.operationId()); + operation.setUri(dto.operation()); + operation.setMillesime(dto.temporal()); + operation.setDateCreation(dto.created() != null ? dto.created() : null); + operation.setDateMiseAJour(dto.modified() != null ? dto.modified() : null); + operation.setStatutValidation(dto.validationState()); - operationById.setLabel(createListLangueContenu( + operation.setLabel(createListLangueContenu( createLangueContenu(dto.operationLabelLg1(), lg1), createLangueContenu(dto.operationLabelLg2(), lg2))); - operationById.setAltLabel(createListLangueContenu( + operation.setAltLabel(createListLangueContenu( createLangueContenu(dto.operationAltLabelLg1(), lg1), createLangueContenu(dto.operationAltLabelLg2(), lg2))); if (StringUtils.hasText(dto.series()) ) { - OperationBySerieIdSerie serie = new OperationBySerieIdSerie(); + OperationSerie serie = new OperationSerie(); serie.setId(dto.seriesId()); serie.setUri(dto.series()); serie.setLabel(createListLangueContenu( createLangueContenu(dto.seriesLabelLg1(), lg1), createLangueContenu(dto.seriesLabelLg2(), lg2))); - operationById.setSerie(serie); + operation.setSerie(serie); } if (StringUtils.hasText(dto.simsId()) ) { - StructureByIdAttributsInnerListCode rapportQualite = new StructureByIdAttributsInnerListCode(); + IdUri rapportQualite = new IdUri(); rapportQualite.setId(dto.simsId()); - rapportQualite.setUri(dto.sims()); - operationById.setRapportQualite(rapportQualite); + rapportQualite.setUri(URI.create(dto.sims())); + operation.setRapportQualite(rapportQualite); } - return operationById; + return operation; } @Override - public List transformSeriesDTOsToSeries(List dtos) { + public List transformSeriesDTOsToSeries(List dtos) { return dtos.stream().map(this::transformSeriesDTOToSeriesItem).toList(); } - private SerieById transformSeriesDTOToSeriesItem(SeriesDTO dto) { - SerieById serieById = new SerieById(); + private Serie transformSeriesDTOToSeriesItem(SeriesDTO dto) { + Serie serieById = new Serie(); serieById.setOperations(null); serieById.setAltLabel(null); serieById.setDateCreation(null); @@ -207,43 +207,43 @@ private List parseRefList(String raw) { @Override public Indicateur transformIndicateurDTOToIndicateur(IndicateurDTO dto) { - Indicateur indicateurById = new Indicateur(); - - indicateurById.setAltLabel(null); - indicateurById.setResume(null); - indicateurById.setNoteHistorique(null); - indicateurById.setFrequenceCollecte(null); - indicateurById.setRapportQualite(null); - indicateurById.setSeriesContributrices(null); - indicateurById.setSeriesLiees(null); - indicateurById.setIndicateursLies(null); - indicateurById.setDateCreation(null); - indicateurById.setDateMiseAJour(null); - indicateurById.setProprietaires(null); - indicateurById.setOrganismesResponsables(null); - indicateurById.setPartenaires(null); - - - - indicateurById.setId(dto.indicatorId()); - indicateurById.setUri(dto.indicator()); - indicateurById.setDateCreation(dto.created() != null ? dto.created().toString() : null); - indicateurById.setDateMiseAJour(dto.modified() != null ? dto.modified().toString() : null); - indicateurById.setStatuValidation(dto.validationState()); - - indicateurById.setLabel(createListLangueContenu( + Indicateur indicateur = new Indicateur(); + + indicateur.setAltLabel(null); + indicateur.setResume(null); + indicateur.setNoteHistorique(null); + indicateur.setFrequenceCollecte(null); + indicateur.setRapportQualite(null); + indicateur.setSeriesContributrices(null); + indicateur.setSeriesLiees(null); + indicateur.setIndicateursLies(null); + indicateur.setDateCreation(null); + indicateur.setDateMiseAJour(null); + indicateur.setProprietaires(null); + indicateur.setOrganismesResponsables(null); + indicateur.setPartenaires(null); + + + + indicateur.setId(dto.indicatorId()); + indicateur.setUri(dto.indicator()); + indicateur.setDateCreation(dto.created() != null ? dto.created().toString() : null); + indicateur.setDateMiseAJour(dto.modified() != null ? dto.modified().toString() : null); + indicateur.setStatuValidation(dto.validationState()); + + indicateur.setLabel(createListLangueContenu( createLangueContenu(dto.indicatorLabelLg1(), lg1), createLangueContenu(dto.indicatorLabelLg2(), lg2))); - indicateurById.setAltLabel(createListLangueContenu( + indicateur.setAltLabel(createListLangueContenu( createLangueContenu(dto.indicatorAltLabelLg1(), lg1), createLangueContenu(dto.indicatorAltLabelLg2(), lg2))); - indicateurById.setResume(createListLangueContenu( + indicateur.setResume(createListLangueContenu( createLangueContenu(dto.indicatorAbstractLg1(), lg1), createLangueContenu(dto.indicatorAbstractLg2(), lg2))); - indicateurById.setNoteHistorique(createListLangueContenu( + indicateur.setNoteHistorique(createListLangueContenu( createLangueContenu(dto.indicatorHistoryNoteLg1(), lg1), createLangueContenu(dto.indicatorHistoryNoteLg2(), lg2))); @@ -253,24 +253,24 @@ public Indicateur transformIndicateurDTOToIndicateur(IndicateurDTO dto) { frequence.setLabel(createListLangueContenu( createLangueContenu(dto.periodicityLabelLg1(), lg1), createLangueContenu(dto.periodicityLabelLg2(), lg2))); - indicateurById.setFrequenceCollecte(frequence); + indicateur.setFrequenceCollecte(frequence); } if (dto.simsId() != null && !dto.simsId().isBlank()) { - StructureByIdAttributsInnerListCode rapportQualite = new StructureByIdAttributsInnerListCode(); + IdUri rapportQualite = new IdUri(); rapportQualite.setId(dto.simsId()); - rapportQualite.setUri(dto.sims()); - indicateurById.setRapportQualite(rapportQualite); + rapportQualite.setUri(URI.create(dto.sims())); + indicateur.setRapportQualite(rapportQualite); } - indicateurById.setSeriesContributrices(parseIdUriLabelList(dto.wasGeneratedBySeries())); - indicateurById.setSeriesLiees(parseIdUriLabelList(dto.seeAlsoSeries())); - indicateurById.setIndicateursLies(parseIdUriLabelList(dto.seeAlsoIndicators())); - indicateurById.setProprietaires(parseIdUriLabelList(dto.creators())); - indicateurById.setOrganismesResponsables(parseIdUriLabelList(dto.publishers())); - indicateurById.setPartenaires(parseIdUriLabelList(dto.contributors())); + indicateur.setSeriesContributrices(parseIdUriLabelList(dto.wasGeneratedBySeries())); + indicateur.setSeriesLiees(parseIdUriLabelList(dto.seeAlsoSeries())); + indicateur.setIndicateursLies(parseIdUriLabelList(dto.seeAlsoIndicators())); + indicateur.setProprietaires(parseIdUriLabelList(dto.creators())); + indicateur.setOrganismesResponsables(parseIdUriLabelList(dto.publishers())); + indicateur.setPartenaires(parseIdUriLabelList(dto.contributors())); - return indicateurById; + return indicateur; } private List parseIdUriLabelList(String raw) { diff --git a/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/api/testcontainers/DatasetsQueriesTest.java b/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/api/testcontainers/DatasetsQueriesTest.java index f32c31aca..9d4e83c14 100644 --- a/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/api/testcontainers/DatasetsQueriesTest.java +++ b/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/api/testcontainers/DatasetsQueriesTest.java @@ -1,7 +1,7 @@ package fr.insee.rmes.magma.gestion.api.testcontainers; import fr.insee.rmes.magma.gestion.api.DatasetsEndpoints; -import fr.insee.rmes.magma.gestion.model.DataSet; +import fr.insee.rmes.magma.gestion.model.Dataset; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -87,7 +87,7 @@ void should_return_all_datasets_when_getListDatasets() { assertNotNull(result); assertEquals(2, result.size()); - var ids = result.stream().map(DataSet::getId).toList(); + var ids = result.stream().map(Dataset::getId).toList(); assertTrue(ids.contains(DATASET_ID)); assertTrue(ids.contains(DATASET_ID_2)); } @@ -129,7 +129,7 @@ void should_return_all_datasets_when_dateMiseAJour_is_before_modified_date() { assertNotNull(result); assertEquals(2, result.size()); - var ids = result.stream().map(DataSet::getId).toList(); + var ids = result.stream().map(Dataset::getId).toList(); assertTrue(ids.contains(DATASET_ID)); assertTrue(ids.contains(DATASET_ID_2)); } diff --git a/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImplTest.java b/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImplTest.java index 51d0d0e2b..15e3bb65e 100644 --- a/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImplTest.java +++ b/magma-gestion-impl/src/test/java/fr/insee/rmes/magma/gestion/services/SeriesOperationsServiceImplTest.java @@ -146,7 +146,7 @@ void should_map_rapportQualite_when_simsId_present() { assertAll( () -> assertNotNull(result.getRapportQualite()), () -> assertEquals("1500", result.getRapportQualite().getId()), - () -> assertEquals("http://id.insee.fr/qualite/rapport/1500", result.getRapportQualite().getUri()) + () -> assertEquals(URI.create("http://id.insee.fr/qualite/rapport/1500"), result.getRapportQualite().getUri()) ); } @@ -283,7 +283,7 @@ void should_only_populate_seriesId_uri_and_label_not_detail_fields() { @Test void should_map_identifiers_when_transformOperationDTO() { - var result = service.transformOperationDTOToOperationById(fullOperationDTO()); + var result = service.transformOperationDTOToOperation(fullOperationDTO()); assertAll( () -> assertEquals("s2193", result.getId()), @@ -297,7 +297,7 @@ void should_map_identifiers_when_transformOperationDTO() { @Test void should_map_multilingual_labels_when_transformOperationDTO() { - var result = service.transformOperationDTOToOperationById(fullOperationDTO()); + var result = service.transformOperationDTOToOperation(fullOperationDTO()); assertAll( () -> assertEquals(2, result.getLabel().size()), @@ -313,7 +313,7 @@ void should_map_multilingual_labels_when_transformOperationDTO() { @Test void should_map_serie_when_seriesId_is_present() { - var result = service.transformOperationDTOToOperationById(fullOperationDTO()); + var result = service.transformOperationDTOToOperation(fullOperationDTO()); assertAll( () -> assertNotNull(result.getSerie()), @@ -333,7 +333,7 @@ void should_not_set_serie_when_seriesId_is_null() { null, null, null, null, null, null, null, null, null ); - assertNull(service.transformOperationDTOToOperationById(dto).getSerie()); + assertNull(service.transformOperationDTOToOperation(dto).getSerie()); } @Test @@ -345,17 +345,17 @@ void should_not_set_serie_when_seriesId_is_blank() { " ", null, null, null, null, null, null, null, null ); - assertNull(service.transformOperationDTOToOperationById(dto).getSerie()); + assertNull(service.transformOperationDTOToOperation(dto).getSerie()); } @Test void should_map_rapportQualite_when_simsId_present_for_operation() { - var result = service.transformOperationDTOToOperationById(fullOperationDTO()); + var result = service.transformOperationDTOToOperation(fullOperationDTO()); assertAll( () -> assertNotNull(result.getRapportQualite()), () -> assertEquals("2203", result.getRapportQualite().getId()), - () -> assertEquals("http://id.insee.fr/qualite/rapport/2203", result.getRapportQualite().getUri()) + () -> assertEquals(URI.create("http://id.insee.fr/qualite/rapport/2203"), result.getRapportQualite().getUri()) ); } @@ -368,7 +368,7 @@ void should_not_set_rapportQualite_when_simsId_is_null_for_operation() { "s1001", "http://id.insee.fr/operations/serie/s1001", null, null, null, null, null, null, null ); - assertNull(service.transformOperationDTOToOperationById(dto).getRapportQualite()); + assertNull(service.transformOperationDTOToOperation(dto).getRapportQualite()); } @Test @@ -379,7 +379,7 @@ void should_map_null_dates_as_null_when_transformOperationDTO() { null, null, null, null, null, null, null, null, null, null ); - var result = service.transformOperationDTOToOperationById(dto); + var result = service.transformOperationDTOToOperation(dto); assertNull(result.getDateCreation()); assertNull(result.getDateMiseAJour()); @@ -469,7 +469,7 @@ void should_map_rapportQualite_indicateur_when_simsId_present() { assertAll( () -> assertNotNull(result.getRapportQualite()), () -> assertEquals("3500", result.getRapportQualite().getId()), - () -> assertEquals("http://id.insee.fr/qualite/rapport/3500", result.getRapportQualite().getUri()) + () -> assertEquals(URI.create("http://id.insee.fr/qualite/rapport/3500"), result.getRapportQualite().getUri()) ); } diff --git a/magma-gestion-interface/pom.xml b/magma-gestion-interface/pom.xml index ae1a617a2..7eae38362 100644 --- a/magma-gestion-interface/pom.xml +++ b/magma-gestion-interface/pom.xml @@ -85,7 +85,7 @@ true true - StructureById_mesures_inner_label_inner=LocalisedLabel + StructureById_mesures_inner_label_inner=LocalisedLabel,ListeDistributions_inner=Distribution, ListeSeries_inner=Serie true false false diff --git a/magma-oas/src/main/resources/id-uri.schema.json b/magma-oas/src/main/resources/id-uri.schema.json new file mode 100644 index 000000000..1e44b5766 --- /dev/null +++ b/magma-oas/src/main/resources/id-uri.schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://magma.insee/rubrique.schema.json", + "title": "IdUri", + "description": "Ensemble de propriétés communes à Territoire, CodeListe et Organisme", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "uri": { + "type": "string", + "format": "uri" + } + }, + "required": ["id"], + "additionalProperties": false +} \ No newline at end of file diff --git a/magma-oas/src/main/resources/openapi-diffusion.yaml b/magma-oas/src/main/resources/openapi-diffusion.yaml index 65390b150..816ee5535 100644 --- a/magma-oas/src/main/resources/openapi-diffusion.yaml +++ b/magma-oas/src/main/resources/openapi-diffusion.yaml @@ -1,13 +1,13 @@ openapi: 3.1.0 info: - title: API RMéS - version: 3.7.2 + title: Magma Diffusion API + version: ${version} description: API sur les métadonnées de l'Insee externalDocs: description: This API is open source, the sources can be found here - url: https://github.com/InseeFr/Metadata-API + url: https://github.com/InseeFr/Magma servers: - - url: http://localhost:8080/metadata-api + - url: http://localhost:8080 ### TAGS SPECIFICATION ### diff --git a/magma-oas/src/main/resources/openapi-gestion.yaml b/magma-oas/src/main/resources/openapi-gestion.yaml index 8aa197d21..9219c0e10 100644 --- a/magma-oas/src/main/resources/openapi-gestion.yaml +++ b/magma-oas/src/main/resources/openapi-gestion.yaml @@ -6,221 +6,22 @@ info: name: dr59-sndil url: https://www.insee.fr/fr/accueil email: dr59-sinl-equipe-maintenance-rmes@insee.fr - version: 1.4.11 + version: ${version} tags: - - name: Codes lists - description: Consultation Gestion API - listes des codes - - name: Organisations - description: Consultation des organisations de la base de gestion - - name: Structures/Composants - description: Consultation Magma API - Structures/Composants - - name: Concepts - description: Consultation Gestion API - Concepts - name: Series-Operations description: Consultation des Séries et Opérations de la base de gestion - name: Datasets description: Consultation Magma API - datasets +servers: + - url: http://localhost:8080 security: - bearerAuth: [] paths: - # ============================================ - # STRUCTURES / COMPOSANTS - # ============================================ - /structures: - get: - tags: - - Structures/Composants - summary: Get all structures - operationId: getAllStructures - parameters: - - name: dateMiseAJour - in: query - description: 'Date of last update. Example: 2023-01-31' - required: false - schema: - type: string - format: date - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AllStructure' - '404': - description: Not found - '500': - description: Internal server error - - /structure/{id}: - get: - tags: - - Structures/Composants - summary: Get a structure - operationId: getStructure - parameters: - - name: id - in: path - required: true - schema: - type: string - - name: dateMiseAJour - in: query - description: If true, returns only the update date - required: false - schema: - type: boolean - default: false - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/StructureById' - '404': - description: Not found - '500': - description: Internal server error - - /structure/{id}/sliceKeys: - get: - tags: - - Structures/Composants - summary: Get slice keys - operationId: getSliceKeys - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/StructureSliceKeys' - '404': - description: Not found - '500': - description: Internal server error - - /composants: - get: - tags: - - Structures/Composants - summary: Get all components - operationId: getAllComponents - parameters: - - name: dateMiseAJour - in: query - description: 'Date of last update. Example: 2023-01-31' - required: false - schema: - type: string - format: date - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AllComponent' - '404': - description: Not found - '500': - description: Internal server error - - /composant/{id}: - get: - tags: - - Structures/Composants - summary: Get a component - operationId: getComponentById - parameters: - - name: id - in: path - required: true - schema: - type: string - - name: dateMiseAJour - in: query - description: If true, returns only the update date - required: false - schema: - type: boolean - default: false - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/ComponentById' - '404': - description: Not found - '500': - description: Internal server error # ============================================ - # ORGANISATIONS - # ============================================ - /organisations: - get: - tags: - - Organisations - summary: Get all organisations - operationId: getAllOrganisations - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Organisation' - '404': - description: Not found - '500': - description: Internal server error - - /organisation/{id}/: - get: - tags: - - Organisations - summary: Get one organisation - operationId: getOrganisationById - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/Organisation' - '404': - description: Not found - '500': - description: Internal server error - - # ============================================ - # SERIES / OPERATIONS (Pogues) + # SERIES / OPERATIONS # ============================================ /operations/series: get: @@ -237,17 +38,18 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/SerieById' + $ref: '#/components/responses/SeriesListe200' + '400': + $ref: '#/components/responses/IncorrectRequest' '404': - description: Not found + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' '500': - description: Internal server error + $ref: '#/components/responses/ServerError' + + + /operations/serie/{id}: get: @@ -263,15 +65,15 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/SerieById' + $ref: '#/components/responses/Serie200' + '400': + $ref: '#/components/responses/IncorrectRequest' '404': - description: Not found + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' '500': - description: Internal server error + $ref: '#/components/responses/ServerError' /operations/operation/{id}: get: @@ -287,15 +89,15 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/OperationById' + $ref: '#/components/responses/Operation200' + '400': + $ref: '#/components/responses/IncorrectRequest' '404': - description: Not found + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' '500': - description: Internal server error + $ref: '#/components/responses/ServerError' /operations/indicateur/{id}: get: @@ -311,152 +113,20 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/Indicateur' - '404': - description: Not found - '500': - description: Internal server error - - - # ============================================ - # CODES LISTS - # ============================================ - /listesCodes: - get: - tags: - - Codes lists - summary: Get all codes lists - operationId: getAllCodesLists - parameters: - - name: dateMiseAJour - in: query - description: 'Date of last update. Example: 2023-01-31' - required: false - schema: - type: string - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/AllListCode' - '404': - description: Not found - '500': - description: Internal server error - - /listeCode/{id}: - get: - tags: - - Codes lists - summary: Get one codes list - operationId: getCodesList - parameters: - - name: id - in: path - description: Notation of the code list - required: true - schema: - type: string - - name: dateMiseAJour - in: query - description: If true, returns only the update date - required: false - schema: - type: boolean - default: false - - name: withCodes - in: query - description: Include codes in the response - required: true - schema: - type: boolean - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/ListCodeById' + $ref: '#/components/responses/Indicateur200' + '400': + $ref: '#/components/responses/IncorrectRequest' '404': - description: Not found + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' '500': - description: Internal server error + $ref: '#/components/responses/ServerError' - /listeCode/{id}/pagination: - get: - tags: - - Codes lists - summary: Get one codes list with 5 codes per page - operationId: getCodesListPagination - parameters: - - name: id - in: path - description: Notation of the code list - required: true - schema: - type: string - - name: pageNumber - in: query - description: Page number (starting from 0) - required: true - schema: - type: integer - format: int32 - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/ListCodeById' - '404': - description: Not found - '416': - description: Requested Range Not Satisfiable - Page does not exist - '500': - description: Internal server error # ============================================ # DATASETS # ============================================ - /datasets/list: - get: - tags: - - Datasets - summary: Get list of datasets - operationId: getListDatasets - parameters: - - name: dateMiseAJour - in: query - description: 'Date of last update. Example: 2023-01-31' - required: false - schema: - type: string - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/DataSet' - '400': - description: Bad Request - '401': - description: Unauthorized - '404': - description: Not found - '500': - description: Internal server error /dataset/{id}: get: @@ -472,57 +142,15 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/DataSet' + $ref: '#/components/responses/Dataset200' '400': - description: Bad Request - '401': - description: Unauthorized + $ref: '#/components/responses/IncorrectRequest' '404': - description: Not found + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' '500': - description: Internal server error - patch: - tags: - - Datasets - summary: Update some properties of a dataset - description: Update ObservationNumber, issued, modified, temporal, or numSeries of a dataset - operationId: patchDataSet - parameters: - - name: id - in: path - required: true - schema: - type: string - requestBody: - description: JSON with parameters you want to change - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/PatchDataset' - example: - issued: "2022-11-11" - modified: "2023-12-31" - temporal: - startPeriod: "2020-01-01" - endPeriod: "2024-01-01" - numObservations: 150 - numSeries: 12 - responses: - '200': - description: Success - '400': - description: Bad Request - '401': - description: Unauthorized - '404': - description: Not found - '500': - description: Internal server error + $ref: '#/components/responses/ServerError' /dataset/{id}/distributions: get: @@ -538,378 +166,211 @@ paths: type: string responses: '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Distribution' + $ref: '#/components/responses/DistributionsListe200' '400': - description: Bad Request - '401': - description: Unauthorized - '404': - description: Not found - '500': - description: Internal server error - - # ============================================ - # CONCEPTS - # ============================================ - /concepts: - get: - tags: - - Concepts - summary: List of concepts - operationId: getAllConcepts - parameters: - - name: dateMiseAJour - in: query - description: 'Date of last update. Example: 2023-01-31' - required: false - schema: - type: string - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/ConceptById' - '404': - description: Not found - '500': - description: Internal server error - - /concept/{id}: - get: - tags: - - Concepts - summary: Get one concept - operationId: getDetailedConcept - parameters: - - name: id - in: path - description: 'Identifiant du concept (format : c[0-9]{4})' - required: true - schema: - type: string - pattern: 'c[0-9]{4}' - example: c2066 - - name: dateMiseAJour - in: query - description: If true, returns only the update date - required: false - schema: - type: boolean - default: false - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/AllConcept' - '404': - description: Not found - '500': - description: Internal server error - - /concepts/collection{id}: - get: - tags: - - Concepts - summary: List of collection's concepts - operationId: getCollectionOfConcepts - parameters: - - name: id - in: path - description: Identifiant interne de la collection - required: true - schema: - type: string - example: definitions-insee-fr - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: '#/components/schemas/CollectionOfConcepts' - '404': - description: Not found - '500': - description: Internal server error - - /concepts/collection/{id}/concepts: - get: - tags: - - Concepts - summary: Set of concepts in a collection - operationId: getSetOfConceptsInACollection - parameters: - - name: id - in: path - description: Identifiant interne de la collection - required: true - schema: - type: string - example: definitions-insee-fr - responses: - '200': - description: Success - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/SetOfConcepts' - '404': - description: Not found - '500': - description: Internal server error - -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT - - schemas: - # ============================================ - # COMMON / SHARED SCHEMAS - # ============================================ - - IdLabel: - type: object - properties: - id: - type: string - type: - type: string - label: - type: array - items: - $ref: './langue-contenu.schema.json' - - # ============================================ - # STRUCTURES / COMPOSANTS SCHEMAS - # ============================================ - AllStructure: - type: object - properties: - dateMiseAJour: - type: string - statutValidation: - type: string - id: - type: string - - StructureById: - type: object - properties: - dateMiseAJour: - type: string - dateCreation: - type: string - notation: - type: string - statutValidation: - type: string - mesures: - type: array - items: - $ref: '#/components/schemas/Mesure' - id: - type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - version: - type: string - attributs: - type: array - items: - $ref: '#/components/schemas/Attribut' - dimensions: - type: array - items: - $ref: '#/components/schemas/Dimension' + $ref: '#/components/responses/IncorrectRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '500': + $ref: '#/components/responses/ServerError' - StructureSliceKeys: - type: object - properties: - composants: - type: array - items: + + /datasets/list: + get: + tags: + - Datasets + summary: Get list of datasets + operationId: getListDatasets + parameters: + - name: dateMiseAJour + in: query + description: 'Date of last update. Example: 2023-01-31' + required: false + schema: type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - type: - type: string + responses: + '200': + $ref: '#/components/responses/DatasetsListe200' + '400': + $ref: '#/components/responses/IncorrectRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '500': + $ref: '#/components/responses/ServerError' - Mesure: - type: object - properties: - ordre: - type: string - notation: - type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - representation: - type: string +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT - Attribut: - type: object - properties: - ordre: - type: string - notation: - type: string - listCode: - $ref: '#/components/schemas/ListCodeRef' - attachement: - type: string - obligatoire: - type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - representation: - type: string + responses: - Dimension: - type: object - properties: - ordre: - type: string - notation: - type: string - listCode: - $ref: '#/components/schemas/ListCodeRef' - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - representation: - type: string + IncorrectRequest: + description: 'La syntaxe de la requête est incorrecte' - ListCodeRef: - type: object - properties: - id: - type: string - uri: - type: string + NotFound: + description: 'Ressource non trouvée' - AllComponent: - type: object - properties: - dateMiseAJour: - type: string - statutValidation: - type: string - id: - type: string + NotAcceptable: + description: 'L''en-tête HTTP ''Accept'' contient une valeur non acceptée' - ComponentById: - type: object - properties: - dateMiseAJour: - type: string - dateCreation: - type: string - concept: - $ref: '#/components/schemas/ConceptRef' - statutValidation: - type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - type: - type: string - uri: - type: string - representation: - type: string - version: - type: string - notation: - type: string - id: - type: string - listeCode: - $ref: '#/components/schemas/ListeCodeWithCodes' + ServerError: + description: 'Erreur interne du serveur' - ConceptRef: - type: object - properties: - id: - type: string - uri: - type: string - ListeCodeWithCodes: - type: object - properties: - codes: - type: array - items: - $ref: '#/components/schemas/Code' - id: - type: string - uri: - type: string + Serie200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/Serie' + examples: + défaut: + $ref: '#/components/examples/Serie' + application/xml: + schema: + $ref: '#/components/schemas/Serie' + examples: + défaut: + $ref: '#/components/examples/Serie' + + + SeriesListe200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/ListeSeries' + examples: + défaut: + $ref: '#/components/examples/ListeSeries' + application/xml: + schema: + $ref: '#/components/schemas/ListeSeries' + examples: + défaut: + $ref: '#/components/examples/ListeSeries' + + Operation200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/Operation' + examples: + défaut: + $ref: '#/components/examples/Operation' + application/xml: + schema: + $ref: '#/components/schemas/Operation' + examples: + défaut: + $ref: '#/components/examples/Operation' + + Indicateur200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/Indicateur' + examples: + défaut: + $ref: '#/components/examples/Indicateur' + application/xml: + schema: + $ref: '#/components/schemas/Indicateur' + examples: + défaut: + $ref: '#/components/examples/Indicateur' + + + + Dataset200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/Dataset' + examples: + défaut: + $ref: '#/components/examples/Dataset' + application/xml: + schema: + $ref: '#/components/schemas/Dataset' + examples: + défaut: + $ref: '#/components/examples/Dataset' + + DistributionsListe200: + description: 'Opération réussie' + content: + application/json: + schema: + $ref: '#/components/schemas/ListeDistributions' + examples: + défaut: + $ref: '#/components/examples/ListeDistributions' + application/xml: + schema: + $ref: '#/components/schemas/ListeDistributions' + examples: + défaut: + $ref: '#/components/examples/ListeDistributions' + + DatasetsListe200: + description: 'Opération réussie pour les datasets' + content: + application/json: + schema: + $ref: '#/components/schemas/ListeDatasets' + examples: + défaut: + $ref: '#/components/examples/ListeDatasets' + application/xml: + schema: + $ref: '#/components/schemas/ListeDatasets' + examples: + défaut: + $ref: '#/components/examples/ListeDatasets' + schemas: # ============================================ - # ORGANISATIONS SCHEMAS + # COMMON / SHARED SCHEMAS # ============================================ - Organisation: + + IdLabel: type: object properties: id: type: string - uri: + type: type: string label: type: array items: - $ref: 'langue-contenu.schema.json' - abreviation: - type: string - uniteDe: - type: string - sousTelleDe: - type: string - altlabel: - type: array - items: - $ref: 'langue-contenu.schema.json' + $ref: './langue-contenu.schema.json' + # ============================================ # SERIES / OPERATIONS SCHEMAS # ============================================ - SerieById: + + ListeSeries: + description: 'Liste des séries' + type: array + xml: + wrapped: true + name: Definition + items: + $ref: '#/components/schemas/Serie' + + Serie: type: object properties: seriesId: @@ -937,7 +398,7 @@ components: frequenceCollecte: $ref: 'id-uri-label.schema.json' rapportQualite: - $ref: '#/components/schemas/RapportQualite' + $ref: 'id-uri.schema.json' famille: $ref: 'id-uri-label.schema.json' seriesPrecedentes: @@ -991,14 +452,6 @@ components: nbOperation: type: string - RapportQualite: - type: object - properties: - id: - type: string - uri: - type: string - Frequence: type: object properties: @@ -1011,37 +464,6 @@ components: uri: type: string - Famille: - type: object - properties: - id: - type: string - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - - OperationBySerieId: - type: object - properties: - altLabel: - type: array - items: - $ref: 'langue-contenu.schema.json' - label: - type: array - items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - serie: - $ref: '#/components/schemas/SerieRef' - id: - type: string - millesime: - type: string SerieRef: type: object @@ -1057,7 +479,7 @@ components: frequence: $ref: '#/components/schemas/Frequence' - OperationById: + Operation: type: object properties: id: @@ -1077,7 +499,7 @@ components: serie: $ref: '#/components/schemas/SerieRef' rapportQualite: - $ref: '#/components/schemas/RapportQualite' + $ref: './id-uri.schema.json' dateCreation: type: string format: date @@ -1113,7 +535,7 @@ components: frequenceCollecte: $ref: './id-uri-label.schema.json' rapportQualite: - $ref: '#/components/schemas/RapportQualite' + $ref: './id-uri.schema.json' seriesContributrices: type: array items: @@ -1128,81 +550,124 @@ components: $ref: './id-uri-label.schema.json' dateCreation: type: string - dateMiseAJour: + dateMiseAJour: + type: string + proprietaires: + type: array + items: + $ref: './id-uri-label.schema.json' + organismesResponsables: + type: array + items: + $ref: './id-uri-label.schema.json' + partenaires: + type: array + items: + $ref: './id-uri-label.schema.json' + statuValidation: + type: string + + # ============================================ + # DATASETS SCHEMAS + # ============================================ + + Theme: + type: object + properties: + uri: + type: string + label: + type: array + items: + $ref: './langue-contenu.schema.json' + themeTaxonomy: + type: string + + LandingPage: + type: object + properties: + lang: + type: string + url: + type: string + + ProcessStep: + type: object + properties: + id: + type: string + label: + $ref: 'langue-contenu.schema.json' + + Temporal: + type: object + properties: + startPeriod: + type: string + endPeriod: + type: string + + Structure: + type: object + properties: + uri: + type: string + id: + type: string + dsd: type: string - proprietaires: - type: array - items: - $ref: './id-uri-label.schema.json' - organismesResponsables: + + WasDerivedFrom: + type: object + properties: + datasets: type: array items: - $ref: './id-uri-label.schema.json' - partenaires: + type: string + description: type: array items: - $ref: './id-uri-label.schema.json' - statuValidation: - type: string - - - + $ref: './langue-contenu.schema.json' + ListeDistributions: + description: 'Liste des distributions' + type: array + xml: + wrapped: true + name: Definition + items: + $ref: '#/components/schemas/Distribution' - # ============================================ - # CODE LISTS SCHEMAS - # ============================================ - AllListCode: + Distribution: type: object properties: - ordre: - type: string - id: - type: string - version: + identifier: type: string - statutValidation: + byteSize: type: string - dateMiseAJour: + created: type: string - - ListCodeById: - type: object - properties: - codes: + description: type: array items: - $ref: '#/components/schemas/Code' - id: - type: string - label: + $ref: './langue-contenu.schema.json' + downloadURL: type: array items: - $ref: 'langue-contenu.schema.json' - uri: - type: string - version: - type: string - dateMiseAJour: + type: string + format: type: string - - Code: - type: object - properties: - code: + modified: type: string - label: + title: type: array items: - $ref: 'langue-contenu.schema.json' + $ref: './langue-contenu.schema.json' uri: type: string - # ============================================ - # DATASETS SCHEMAS - # ============================================ - DataSet: + Dataset: type: object properties: id: @@ -1324,192 +789,303 @@ components: items: $ref: './langue-contenu.schema.json' - Theme: - type: object - properties: - uri: - type: string - label: - type: array - items: - $ref: './langue-contenu.schema.json' - themeTaxonomy: - type: string - - LandingPage: - type: object - properties: - lang: - type: string - url: - type: string - - ProcessStep: - type: object - properties: - id: - type: string - label: - $ref: 'langue-contenu.schema.json' - - Temporal: - type: object - properties: - startPeriod: - type: string - endPeriod: - type: string - - Structure: - type: object - properties: - uri: - type: string - id: - type: string - dsd: - type: string - - WasDerivedFrom: - type: object - properties: - datasets: - type: array - items: - type: string - description: - type: array - items: - $ref: './langue-contenu.schema.json' - - Distribution: - type: object - properties: - identifier: - type: string - byteSize: - type: string - created: - type: string - description: - type: array - items: - $ref: './langue-contenu.schema.json' - downloadURL: - type: array - items: - type: string - format: - type: string - modified: - type: string - title: - type: array - items: - $ref: './langue-contenu.schema.json' - uri: - type: string - PatchDataset: - type: object - description: DTO for patching dataset properties - properties: - issued: - type: string - description: Issue date (format YYYY-MM-DD) - example: "2022-11-11" - modified: - type: string - description: Last modification date (format YYYY-MM-DD) - example: "2023-12-31" - temporal: - $ref: '#/components/schemas/Temporal' - numObservations: - type: integer - format: int32 - description: Number of observations - example: 150 - numSeries: - type: integer - format: int32 - description: Number of series - example: 12 + ListeDatasets: + description: 'Liste des datasets' + type: array + xml: + wrapped: true + name: Definition + items: + $ref: '#/components/schemas/Dataset' - # ============================================ - # CONCEPTS SCHEMAS - # ============================================ - AllConcept: - type: object - properties: - dateMiseAJour: - type: string - statutValidation: - type: string - id: - type: string + examples: - ConceptById: - type: object - properties: - dateCreation: - type: string - dateMiseAJour: - type: string - statutValidation: - type: string - id: - type: string + Serie: + value: + code: 's1001' + uri: 'http://bauhaus/operations/serie/s1001' label: - type: array - items: - $ref: 'langue-contenu.schema.json' - dateFinValidite: - type: string - uri: - type: string - version: - type: string - name: - type: string - conceptsSDMX: - type: array - items: - $ref: '#/components/schemas/ConceptSDMX' - definitionCourte: - type: array - items: - $ref: './langue-contenu.schema.json' - - ConceptSDMX: - type: object - properties: - agence: - type: string - id: - type: string + - contenu: 'Enquête innovation' + langue: 'fr' + - contenu: 'Innovation survey' + langue: 'en' + altLabel: + - contenu: 'CIS' + langue: 'fr' + - contenu: 'CIS' + langue: 'en' + resume: + - contenu: '

L''enquête Capacité à innover et stratégie (CIS) permet d’une part, de mesurer le poids économique de ...' + langue: 'fr' + - contenu: '

The original objectives of the Community Innovation Survey (CIS) are to measure the economic weight of innovation in France...' + langue: 'en' + noteHistorique: + - contenu: '

La première édition de l''enquête a été menée en 1993. L''enquête a été réalisée tous les 4 ans jusqu''en 2005...' + langue: 'fr' + - contenu: '

The first edition of the survey took place in 1993. The survey was carried out every 4 years until 2005...' + langue: 'en' + type: + id: '5' + uri: 'http://bauhaus/codes/categorieSource/S' + label: + - contenu: 'Enquête' + langue: 'fr' + - contenu: 'Survey' + langue: 'en' + frequenceCollecte: + id: 'I' + uri: 'http://bauhaus/codes/frequence/I' + label: + - contenu: 'Bisannuelle' + langue: 'fr' + - contenu: 'Biennial' + langue: 'en' + famille: + id: 's15' + uri: 'http://bauhaus/operations/famille/s15' + label: + - contenu: 'Innovation' + langue: 'fr' + - contenu: 'Innovation' + langue: 'en' + seriesPrecedentes: + - id: 's1010' + uri: 'http://bauhaus/operations/serie/s1010' + label: + - contenu: 'Enquête sur les compétences pour innover' + langue: 'fr' + - contenu: 'Innovative skills survey' + langue: 'en' + seriesSuivantes: + - + seriesLiees: + - + operations: + - id: 's1477' + uri: 'http://bauhaus/operations/operation/s1477' + label: + - contenu: 'Enquête capacité à innover et stratégie 2018' + langue: 'fr' + - contenu: 'Community innovation survey 2018' + langue: 'en' + indicateurs: + - + dateMiseAJour: '2025-04-03' + proprietaires: + - id: 'DG75-E430' + uri: 'http://bauhaus/organisations/insee/HIE2000253' + label: + - contenu: 'Division Enquêtes thématiques et études transversales' + langue: 'fr' + - contenu: '' + langue: 'en' + organismesResponsables: + - id: 'DG75-E001' + uri: 'http://bauhaus/organisations/insee/HIE2000005' + label: + - contenu: 'Direction des statistiques d''entreprises (DSE)' + langue: 'fr' + - contenu: '' + langue: 'en' + partenaires: + - + servicesCollecteurs: + - id: 'DR31-DIR' + uri: 'http://bauhaus/organisations/insee/HIE2000054' + label: + - contenu: 'Direction régionale d''Occitanie - siège de Toulouse (DR31-ETB31)' + langue: 'fr' + - contenu: '' + langue: 'en' + statutValidation: 'Validated' + + ListeSeries: + value: + - seriesId: 's1001' + uri: 'http://bauhaus/operations/serie/s1001' + label: + - contenu: 'Enquête innovation' + langue: 'fr' + - contenu: 'Innovation survey' + langue: 'en' + - seriesId: 's1002' + uri: 'http://bauhaus/operations/serie/s1002' + label: + - contenu: 'Enquête auprès des personnes fréquentant des services d''aide' + langue: 'fr' + - contenu: 'Survey among people who use care services' + langue: 'en' + + Operation: + value: + code: 's2193' + uri: 'http://bauhaus/operations/operation/s2193' + label: + - contenu: 'Enquête capacité à innover et stratégie 2024' + langue: 'fr' + - contenu: 'Community Innovation Survey 2024' + langue: 'en' + altLabel: + - contenu: 'CIS 2024' + langue: 'fr' + - contenu: 'CIS 2024' + langue: 'en' + millesime: '2024' + serie: + - id: 's1001' + uri: 'http://bauhaus/operations/serie/s1001' + label: + - contenu: 'Enquête innovation' + langue: 'fr' + - contenu: 'Innovation survey' + langue: 'en' + rapportQualite: + - id: '2203' + uri: 'http://bauhaus/qualite/rapport/2203' + dateCreation: '2025-01-22' + dateMiseAJour: '2025-04-02' - CollectionOfConcepts: - type: object - properties: - id: - type: string - uri: - type: string - dateMiseAJour: - type: string - intitule: - type: array - items: - $ref: './langue-contenu.schema.json' + Indicateur: + value: + code: 'p1631' + uri: 'http://bauhaus/operations/produits/indicateur/p1631' + label: + - contenu: 'Créations d''entreprises' + langue: 'fr' + - contenu: 'Business start-ups' + langue: 'en' + altLabel: + - langue: 'fr' + - langue: 'en' + resume: + - contenu: '

Les statistiques des créations d''entreprises permettent de suivre l''évolution des créations d''entreprises relevant des principaux secteurs d''activité (Industrie, Construction, Commerce, Services).

' + langue: 'fr' + - contenu: '

The statistics on business births track the change in business births in the main sectors of activity.

' + langue: 'en' + noteHistorique: + - contenu: '

Un suivi des créations d’entreprises est effectué par l’Insee depuis les années 1980, à l’aide du répertoire administratif Sirene...' + langue: 'fr' + - contenu: '

Business births have been monitored by Insee since the 1980s, using the administrative register Sirene...' + langue: 'en' + frequenceCollecte: + id: 'M' + uri: 'http://bauhaus/codes/frequence/M' + label: + - contenu: 'Mensuelle' + langue: 'fr' + - contenu: 'Monthly' + langue: 'en' + rapportQualite: + id: 's2120' + uri: 'http://bauhaus/operations/serie/s2120' + label: + - contenu: 'Système d''information sur la démographie d''entreprises' + langue: 'fr' + - contenu: 'Business Demography Information System' + langue: 'en' + seriesLiees: + id: 's1271' + uri: "http://id.insee.fr/operations/serie/s1271" + label: + - contenu: 'Système d''information sur les nouvelles entreprises' + langue: 'fr' + - contenu: 'New enterprises information system' + langue: 'en' + indicateursLies: + id: 'p1632' + uri: "http://id.insee.fr/produits/indicateur/p1632" + label: + - contenu: 'Défaillances d''entreprises' + langue: 'fr' + - contenu: 'Enterprise bankruptcy' + langue: 'en' + dateMiseAJour: '2025-12-16' + proprietaires: + - id: 'DG75-E220' + uri: 'http://bauhaus/organisations/insee/HIE2001134' + label: + - contenu: 'Division Infrastructures et répertoires statistiques' + langue: 'fr' + - contenu: '' + langue: 'en' + organismesResponsables: + - id: 'DG75-E001' + uri: 'http://bauhaus/organisations/insee/HIE2000005' + label: + - contenu: 'Direction des statistiques d''entreprises (DSE)' + langue: 'fr' + - contenu: '' + langue: 'en' + + Dataset: + value: + code: '25baaf1f-61cf-4d50-9124-1477afca2aa4' + uri: 'http://bauhaus/catalogues/jeuDeDonnees/25baaf1f-61cf-4d50-9124-1477afca2aa4' + catalogRecordCreated: '2024-12-09T12:00:00.000' + catalogRecordModified: '2024-12-09T12:00:00.000' + catalogRecordCreator: 'http://bauhaus/organisations/insee/HIE2004937' + identifier: 'DD_EEC_SERIES' + validationState: 'Provisoire, jamais publiée' + title: + - contenu: 'Activité, emploi et chômage - séries longues' + langue: 'fr' + - contenu : 'Activité, emploi et chômage - séries longues' + langue: 'en' description: - type: array - items: - $ref: './langue-contenu.schema.json' + - contenu: 'Les données sont détaillées par sexe, âge, diplôme et catégorie socio-professionnelle (PCS). Pour l’emploi, les données sont détaillées par type de contrat, composante du sous-emploi, temps de travail (temps complet ou partiel). Plusieurs indicateurs en taux sont disponibles : taux d''activité, taux d''emploi ou taux de chômage.\n\nCe jeu de données regroupe notamment les données annuelles de forte valeur (High Value Dataset ou HVD statistiques) désignées par Eurostat sur les sujets suivants : l''emploi , le chômage et la main d’œuvre potentielle.' + langue: 'fr' + - langue: 'en' + scopeNote: + - contenu: 'Des corrections sur les données concernant la population totale ainsi que sur l''emploi et la part dans l''emploi selon le plus haut diplôme obtenu, par sexe et âge regroupé, en moyenne annuelle ont été apportées en septembre 2024 afin de rectifier une erreur, portant sur les années 2018, 2019 et 2020 uniquement.' + langue: 'fr' + - langue: 'en' + wasGeneratedBy: + - contenu: 'http://bauhaus/operations/serie/s1223' + langue: 'fr' + - langue: 'en' + + ListeDistributions: + value: + - identifier: '6d0d296b-9ec5-42fa-a3d5-62ffe7c74dea' + created: '2025-02-17T08:13:23.382171614' + description: + - contenu: 'fichier csv généré par l''API melodi' + langue: 'fr' + - langue: 'en' + downloadURL: + - + modified: '2025-02-17T08:13:23.382171614' + title: + - contenu: 'Capacités d''hébergements touristiques' + langue: 'fr' + - contenu: 'Tourism capacities' + langue: 'en' + uri: 'http://bauhaus/catalogues/distribution/6d0d296b-9ec5-42fa-a3d5-62ffe7c74dea' + + + ListeDatasets: + value: + - id: '25baaf1f-61cf-4d50-9124-1477afca2aa4' + uri: 'http://bauhaus/catalogues/jeuDeDonnees/25baaf1f-61cf-4d50-9124-1477afca2aa4' + catalogRecordCreated: '2024-12-09T12:00:00.000' + catalogRecordModified: '2024-12-09T12:00:00.000' + catalogRecordCreator: 'http://bauhaus/organisations/insee/HIE2004937' + validationState: 'Provisoire, jamais publiée' + title: + - contenu: 'Activité, emploi et chômage - séries longues' + langue: 'fr' + - contenu: 'Activité, emploi et chômage - séries longues' + langue: 'en' + - id: 'a85dab6c-ef0f-4caa-9763-c7f8c840e216' + uri: 'http://bauhaus/catalogues/jeuDeDonnees/a85dab6c-ef0f-4caa-9763-c7f8c840e216' + catalogRecordCreated: '2024-12-09' + catalogRecordModified: '2024-12-09' + validationState: 'Unpublished' + title: + - contenu: 'Activité des branches de l''économie' + langue: 'fr' + - contenu: 'Activité des branches de l''économie' + langue: 'en' + - SetOfConcepts: - type: object - properties: - id: - type: string - uri: - type: string \ No newline at end of file