UNPKG

@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
"use strict"; 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;