@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
JavaScript
;
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;