UNPKG

@gouvfr-anct/mednum

Version:

✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique

45 lines (44 loc) 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.structuresWithServicesNumeriques = void 0; const lieux_de_mediation_numerique_1 = require("@gouvfr-anct/lieux-de-mediation-numerique"); const data_inclusion_merged_1 = require("./data-inclusion-merged"); const onlyWithNumeriqueServices = (service) => service.thematiques?.some((thematique) => thematique.includes('numerique')) ?? false; const matchingService = (service) => (structure) => structure.id === service.structure_id && structure.source === service.source; const toDataInclusionMerged = (dataInclusionStructureAndServices) => (0, data_inclusion_merged_1.mergeStructureAndService)(dataInclusionStructureAndServices.structure, (0, lieux_de_mediation_numerique_1.mergeServices)(dataInclusionStructureAndServices.services, dataInclusionStructureAndServices.structure)); const onlyWithSameIdAs = (structure) => (dataInclusionStructureAndServices) => dataInclusionStructureAndServices.structure.id === structure?.id && dataInclusionStructureAndServices.structure.source === structure.source; const toDataInclusionStructuresWithNewService = (service, structure) => (dataInclusionStructureAndServices) => dataInclusionStructureAndServices.structure.id === structure.id ? { structure: dataInclusionStructureAndServices.structure, services: [...dataInclusionStructureAndServices.services, service] } : dataInclusionStructureAndServices; const appendService = (dataInclusionStructureAndServices, service, structure) => dataInclusionStructureAndServices.find(onlyWithSameIdAs(structure)) == null ? [...dataInclusionStructureAndServices, { services: [service], structure }] : dataInclusionStructureAndServices.map(toDataInclusionStructuresWithNewService(service, structure)); const serviceAsStructure = (dataInclusionStructureAndServices, service, structure) => { const modifiedService = { ...service, nom: service.nom === 'Médiation numérique' ? structure.nom : service.nom }; return [ ...dataInclusionStructureAndServices, { structure: (0, lieux_de_mediation_numerique_1.toStructureDataInclusion)(modifiedService, structure), services: [service] } ]; }; const updateDataInclusionStructuresAndServices = (service, dataInclusionStructureAndServices, structure) => (0, lieux_de_mediation_numerique_1.isServiceWithAdresse)(service) ? serviceAsStructure(dataInclusionStructureAndServices, service, structure) : appendService(dataInclusionStructureAndServices, service, structure); const processStructureAndServices = (service, structure, dataInclusionStructureAndServices) => structure == null ? dataInclusionStructureAndServices : updateDataInclusionStructuresAndServices(service, dataInclusionStructureAndServices, structure); const toDataInclusionStructureAndServices = (dataInclusionStructures) => (dataInclusionStructureAndServices, service) => processStructureAndServices(service, dataInclusionStructures.find(matchingService(service)), dataInclusionStructureAndServices); const structuresWithServicesNumeriques = (dataInclusionStructures, dataInclusionServices) => dataInclusionServices .filter(onlyWithNumeriqueServices) .reduce(toDataInclusionStructureAndServices(dataInclusionStructures), []) .map(toDataInclusionMerged); exports.structuresWithServicesNumeriques = structuresWithServicesNumeriques;