UNPKG

@gouvfr-anct/mednum

Version:

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

34 lines (33 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.publishDataset = void 0; const DATE_FORMAT_CHECK = /\d{8}|(\d{4})-(\d{2})-(\d{2})/g; const datasetFound = (dataset) => dataset != null; const matchTitleFrom = (postDataset) => (dataset) => dataset.title === postDataset.title; const datasetToPublish = (datasetRepository, reference) => async (postDataset, { shouldCreate, exist }) => { const dataset = (await datasetRepository.get(reference)).find(matchTitleFrom(postDataset)); await (datasetFound(dataset) ? exist?.(postDataset, dataset) : shouldCreate?.(postDataset)); }; const removeDate = (title) => title?.replace(DATE_FORMAT_CHECK, ''); const extractNameFromPath = (splitPath) => splitPath[splitPath.length - 1]; const matchName = (ressource) => (existingRessource) => removeDate(existingRessource.name) === removeDate(extractNameFromPath(ressource.source.split('/'))); const toRessourceToUpload = (dataset, datasetRepository) => async (ressourceToPublish) => datasetRepository.updateRessourceFor(dataset)(ressourceToPublish, dataset.ressources.find(matchName(ressourceToPublish))?.id); const updateExistingDataset = (datasetRepository) => async (postDataset, dataset) => { await datasetRepository.update(postDataset, dataset); if (postDataset.ressources.length > 0) { await Promise.all(postDataset.ressources.map(toRessourceToUpload(dataset, datasetRepository))); } }; const createNewDataset = (datasetRepository, reference) => async (postDataset) => { const dataset = await datasetRepository.post(postDataset, reference); if (postDataset.ressources.length > 0) { await Promise.all(postDataset.ressources.map(datasetRepository.addRessourceTo(dataset))); } }; const publishDataset = (datasetRepository, reference) => async (dataset) => { await datasetToPublish(datasetRepository, reference)(dataset, { exist: updateExistingDataset(datasetRepository), shouldCreate: createNewDataset(datasetRepository, reference) }); }; exports.publishDataset = publishDataset;