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