@gouvfr-anct/mednum
Version:
✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique
88 lines (87 loc) • 6.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toLieuxMediationNumerique = exports.validValuesOnly = void 0;
const lieux_de_mediation_numerique_1 = require("@gouvfr-anct/lieux-de-mediation-numerique");
const axios_1 = require("axios");
const fields_1 = require("../fields");
const isFilled = (nullable) => nullable != null && nullable.length > 0;
const localisationIfAny = (localisation) => localisation == null ? {} : { localisation };
const itinerancesIfAny = (itinerance) => isFilled(itinerance) ? { itinerance } : {};
const servicesIfAny = (services) => (isFilled(services) ? { services } : {});
const fraisAChargeIfAny = (fraisACharge) => isFilled(fraisACharge) ? { frais_a_charge: fraisACharge } : {};
const ficheAccesLibreIfAny = (ficheAccesLibre) => ficheAccesLibre == null ? {} : { fiche_acces_libre: ficheAccesLibre };
const modalitesAccompagnementIfAny = (modaliteAccompagnement) => isFilled(modaliteAccompagnement) ? { modalites_accompagnement: modaliteAccompagnement } : {};
const modalitesAccesIfAny = (modalitesAcces) => isFilled(modalitesAcces) ? { modalites_acces: modalitesAcces } : {};
const typologiesIfAny = (typologies) => (isFilled(typologies) ? { typologies } : {});
const dispositifProgrammesNationauxIfAny = (dispositifProgrammesNationaux) => isFilled(dispositifProgrammesNationaux) ? { dispositif_programmes_nationaux: dispositifProgrammesNationaux } : {};
const formationsLabelsIfAny = (formationsLabels) => isFilled(formationsLabels) ? { formations_labels: formationsLabels } : {};
const autresFormationsLabelsIfAny = (autresFormationsLabels) => isFilled(autresFormationsLabels) ? { autres_formations_labels: autresFormationsLabels } : {};
const publicsSpecifiquementAdressesIfAny = (publicsSpecifiquementAdresses) => isFilled(publicsSpecifiquementAdresses) ? { publics_specifiquement_adresses: publicsSpecifiquementAdresses } : {};
const prisesEnChargeSpecifiquesIfAny = (prisesEnChargeSpecifiques) => isFilled(prisesEnChargeSpecifiques) ? { prise_en_charge_specifique: prisesEnChargeSpecifiques } : {};
const horairesIfAny = (horaires) => (horaires == null ? {} : { horaires });
const priseRdvIfAny = (priseRdv) => (priseRdv == null ? {} : { prise_rdv: priseRdv });
const lieuDeMediationNumerique = async (index, dataSource, sourceName, recorder, { findCommune, isInQpv, isInZrr, geocode, config: matching }) => {
const adresse = (0, fields_1.processAdresse)(findCommune)(dataSource, matching);
const localisation = await (0, fields_1.processLocalisation)(dataSource, matching, geocode(adresse));
if ((0, fields_1.isPrive)(dataSource, matching))
return undefined;
const lieuMediationNumerique = {
id: (0, fields_1.processId)(dataSource, matching, index, sourceName),
pivot: (0, fields_1.processPivot)(dataSource, matching),
nom: (0, fields_1.processNom)(dataSource, matching),
adresse,
...localisationIfAny(localisation),
...typologiesIfAny((0, fields_1.processTypologies)(dataSource, matching)),
contact: (0, fields_1.processContact)(recorder)(dataSource, matching),
...horairesIfAny((0, fields_1.processHoraires)(dataSource, matching)),
presentation: (0, fields_1.processPresentation)(dataSource, matching),
source: (0, fields_1.processSource)(dataSource, matching, sourceName),
...itinerancesIfAny((0, fields_1.processItinerances)(dataSource, matching)),
date_maj: (0, fields_1.processDate)(dataSource, matching),
...servicesIfAny((0, fields_1.processServices)(dataSource, matching)),
...publicsSpecifiquementAdressesIfAny((0, fields_1.processPublicsSpecifiquementAdresses)(dataSource, matching)),
...prisesEnChargeSpecifiquesIfAny((0, fields_1.processPrisesEnChargeSpecifiques)(dataSource, matching)),
...fraisAChargeIfAny((0, fields_1.processFraisACharge)(dataSource, matching)),
...dispositifProgrammesNationauxIfAny((0, fields_1.processDispositifProgrammeNationaux)(dataSource, matching)),
...formationsLabelsIfAny((0, fields_1.processFormationsLabels)(dataSource, matching)),
...autresFormationsLabelsIfAny((0, fields_1.processAutresFormationsLabels)(dataSource, matching, isInQpv, isInZrr, adresse, localisation)),
...modalitesAccesIfAny((0, fields_1.processModalitesAcces)(dataSource, matching)),
...modalitesAccompagnementIfAny((0, fields_1.processModalitesAccompagnement)(dataSource, matching)),
...ficheAccesLibreIfAny((0, fields_1.processFicheAccesLibre)(dataSource, matching, [], adresse)),
...priseRdvIfAny((0, fields_1.processPriseRdv)(dataSource, matching))
};
recorder.commit();
return lieuMediationNumerique;
};
const validValuesOnly = (lieuDeMediationNumeriqueToValidate) => lieuDeMediationNumeriqueToValidate != null;
exports.validValuesOnly = validValuesOnly;
const entryIdentification = (dataSource, matching) => dataSource[matching.nom.colonne]?.toString() ?? '';
const isErrorToReport = (error) => error instanceof lieux_de_mediation_numerique_1.IdError ||
error instanceof lieux_de_mediation_numerique_1.ServicesError ||
error instanceof lieux_de_mediation_numerique_1.VoieError ||
error instanceof lieux_de_mediation_numerique_1.CommuneError ||
error instanceof lieux_de_mediation_numerique_1.CodePostalError ||
error instanceof lieux_de_mediation_numerique_1.NomError;
const logAndSkip = (error) => {
console.log(error);
return undefined;
};
const toLieuxMediationNumerique = (repository, sourceName, report) => async (dataSource, index) => {
try {
return await lieuDeMediationNumerique(index, dataSource, sourceName, report.entry(index), repository);
}
catch (error) {
if (isErrorToReport(error)) {
report
.entry(index)
.record(error.key, error.message, entryIdentification(dataSource, repository.config))
.commit();
return undefined;
}
if (error instanceof axios_1.AxiosError) {
return logAndSkip(error);
}
throw error;
}
};
exports.toLieuxMediationNumerique = toLieuxMediationNumerique;