UNPKG

@gouvfr-anct/mednum

Version:

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

25 lines (24 loc) 1.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeDuplicates = void 0; const merge_lieux_1 = require("./merge-lieux"); const DAYS_IN_YEAR = 365; const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000; const DATE_LIMIT_OFFSET = (DAYS_IN_YEAR / 2) * MILLISECONDS_IN_DAY; const onlyMatchingGroupIds = (ids) => (lieu) => ids.includes(lieu.id); const byDate = (lieuA, lieuB) => lieuB.date_maj.localeCompare(lieuA.date_maj); const isTooOld = (now) => (lieu) => new Date(lieu.date_maj).getTime() < now.getTime() - DATE_LIMIT_OFFSET; const toMergedLieu = (now) => (mergedLieu, lieu) => { if (mergedLieu == null) return lieu; return isTooOld(now)(mergedLieu) || isTooOld(now)(lieu) ? (0, merge_lieux_1.mergeOldLieux)(mergedLieu, lieu) : (0, merge_lieux_1.mergeLieux)(mergedLieu, lieu); }; const idsInGroupsToMergedLieux = (now) => (lieux) => (mergedLieux, [key, groupIds]) => { const lieu = lieux .filter(onlyMatchingGroupIds(groupIds)) .sort(byDate) .reduce(toMergedLieu(now), null); return lieu == null ? mergedLieux : mergedLieux.set(key, lieu); }; const mergeDuplicates = (now) => (lieux, groups) => Array.from(groups.mergeGroupsMap.entries()).reduce(idsInGroupsToMergedLieux(now)(lieux), new Map()); exports.mergeDuplicates = mergeDuplicates;