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