UNPKG

@gouvfr-anct/mednum

Version:

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

55 lines (54 loc) 3.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.saveWithApi = exports.shouldMarkAsDeduplicated = void 0; const axios_1 = __importDefault(require("axios")); const axios_retry_1 = __importDefault(require("axios-retry")); const common_1 = require("../../../../common"); const steps_1 = require("../../../steps"); (0, axios_retry_1.default)(axios_1.default, { retries: 3 }); const toSourceFromId = (id) => id.split('_').at(0); const shouldMarkAsDeduplicated = (mergeGroupsMap) => Array.from(new Set(Array.from(mergeGroupsMap.values()).flat().map(toSourceFromId))).length > 1; exports.shouldMarkAsDeduplicated = shouldMarkAsDeduplicated; const nothingToUpdate = (groups, merged) => merged.size === 0 && groups.itemGroupMap.size === 0 && groups.mergeGroupsMap.size === 0; const saveWithApi = (dedupliquerOptions) => async (groups, merged) => { if (nothingToUpdate(groups, merged)) { console.log("Il n'y a rien à mettre à jour"); return; } try { console.log('Recupération des groupes à supprimer'); const groupsToDelete = (0, steps_1.findGroupIdsToDelete)(await (0, common_1.paginate)(`${dedupliquerOptions.cartographieNationaleApiUrl}/lieux-inclusion-numerique/merge-groups?page[number]=0&page[size]=2000`))(groups); const groupsToDeleteBatchSize = 200; const numberOfGroupsToDeleteBatches = Math.ceil(groupsToDelete.length / groupsToDeleteBatchSize); console.log(`Il y a ${groupsToDelete.length} groupes à supprimer répartis sur ${numberOfGroupsToDeleteBatches} lots`); for (let i = 0; i < numberOfGroupsToDeleteBatches; i++) { console.log(`Suppression du lot ${i + 1}/${numberOfGroupsToDeleteBatches}`); await axios_1.default.patch(`${dedupliquerOptions.cartographieNationaleApiUrl}/lieux-inclusion-numerique/merge-groups`, { mergeGroups: [], groupIdsToDelete: groupsToDelete.slice(i * groupsToDeleteBatchSize, (i + 1) * groupsToDeleteBatchSize) }, (0, common_1.headers)((0, common_1.authHeader)(dedupliquerOptions.cartographieNationaleApiKey))); } const mergeGroupsToSave = (0, steps_1.mergeGroups)(groups, merged); const mergeGroupsBatchSize = 1000; const numberOfMergeGroupsToSaveBatches = Math.ceil(mergeGroupsToSave.length / mergeGroupsBatchSize); console.log(`Il y a ${mergeGroupsToSave.length} groupes à enregistrer répartis sur ${numberOfMergeGroupsToSaveBatches} lots`); for (let i = 0; i < numberOfMergeGroupsToSaveBatches; i++) { console.log(`Enregistrement du lot ${i + 1}/${numberOfMergeGroupsToSaveBatches}`); await axios_1.default.patch(`${dedupliquerOptions.cartographieNationaleApiUrl}/lieux-inclusion-numerique/merge-groups`, { mergeGroups: mergeGroupsToSave.slice(i * mergeGroupsBatchSize, (i + 1) * mergeGroupsBatchSize), groupIdsToDelete: [] }, (0, common_1.headers)((0, common_1.authHeader)(dedupliquerOptions.cartographieNationaleApiKey))); } console.log('Marquage des lieux comme dédupliqués'); if ((0, exports.shouldMarkAsDeduplicated)(groups.mergeGroupsMap)) { await axios_1.default.patch(`${dedupliquerOptions.cartographieNationaleApiUrl}/lieux-inclusion-numerique/mark-all-as-deduplicated`, null, (0, common_1.headers)((0, common_1.authHeader)(dedupliquerOptions.cartographieNationaleApiKey))); } } catch (error) { console.log(error); } }; exports.saveWithApi = saveWithApi;