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