@gouvfr-anct/lieux-de-mediation-numerique
Version:
📚 Bibliothèque pour la modélisation des lieux de médiation numérique respectant le standard du schéma de données des lieux de médiation numériques
56 lines (55 loc) • 4.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromSchemaDataInclusion = exports.mergeServices = void 0;
const models_1 = require("../../../models");
const mandatory_siret_or_rna_error_1 = require("./errors/mandatory-siret-or-rna.error");
const from_schema_data_inclusion_fields_1 = require("./from-schema-data-inclusion-fields");
const toSingleService = (mergedService, service) => ({
...mergedService,
...(0, from_schema_data_inclusion_fields_1.mergeThematiques)(mergedService.thematiques, service.thematiques),
...(0, from_schema_data_inclusion_fields_1.mergeFrais)(mergedService.frais, service.frais),
...(0, from_schema_data_inclusion_fields_1.mergeProfils)(mergedService.profils, service.profils),
...(0, from_schema_data_inclusion_fields_1.mergeTypes)(mergedService.types, service.types),
...(0, from_schema_data_inclusion_fields_1.mergeModesAccueil)(mergedService.modes_accueil, service.modes_accueil),
...(0, from_schema_data_inclusion_fields_1.mergePriseRdv)(mergedService.prise_rdv, service.prise_rdv),
...(0, from_schema_data_inclusion_fields_1.mergeModesOrientationBeneficiaire)(mergedService.modes_orientation_beneficiaire, service.modes_orientation_beneficiaire),
...(0, from_schema_data_inclusion_fields_1.mergeModesOrientationAccompagnateur)(mergedService.modes_orientation_accompagnateur, service.modes_orientation_accompagnateur)
});
const mergeServices = (services, structure) => services.reduce(toSingleService, {
id: `${structure.id}-mediation-numerique`,
nom: 'Médiation numérique',
source: structure.source ?? '',
structure_id: structure.id,
thematiques: []
});
exports.mergeServices = mergeServices;
const throwMandatorySiretOrRnaError = () => {
throw new mandatory_siret_or_rna_error_1.MandatorySiretOrRnaError();
};
const ifAnyPublicSpecifiquementAdresseInArray = (publicSpecifiquementAdresse) => ((publicSpecifiquementAdresse.publics_specifiquement_adresses?.length ?? 0) > 0 ? publicSpecifiquementAdresse : {});
const ifAnyPriseEnChargeSpecifiqueInArray = (priseEnChargeSpecifique) => ((priseEnChargeSpecifique.prise_en_charge_specifique?.length ?? 0) > 0 ? priseEnChargeSpecifique : {});
const fromSchemaDataInclusionItem = (structure, service) => ({
id: (0, models_1.Id)(structure.id),
nom: (0, models_1.Nom)(structure.nom),
pivot: (0, models_1.Pivot)(structure.siret ?? structure.rna ?? throwMandatorySiretOrRnaError()),
...(0, from_schema_data_inclusion_fields_1.adresseFromDataInclusion)(structure),
...(0, from_schema_data_inclusion_fields_1.localisationFromDataInclusion)(structure.latitude, structure.longitude),
...(0, from_schema_data_inclusion_fields_1.servicesFromDataInclusion)(service.thematiques),
date_maj: new Date(structure.date_maj),
...(0, from_schema_data_inclusion_fields_1.contactFromDataInclusion)(structure.courriel, structure.telephone, structure.site_web),
...(0, from_schema_data_inclusion_fields_1.sourceFromDataInclusion)(structure.source),
...(0, from_schema_data_inclusion_fields_1.accessibiliteFromDataInclusion)(structure.accessibilite),
...(0, from_schema_data_inclusion_fields_1.conditionsAccesFromDataInclusion)(service.frais),
...(0, from_schema_data_inclusion_fields_1.horairesFromDataInclusion)(structure.horaires_ouverture),
...(0, from_schema_data_inclusion_fields_1.labelsFromDataInclusion)(structure.labels_nationaux, structure.labels_autres),
...(0, from_schema_data_inclusion_fields_1.modalitesAccompagnementFromDataInclusion)(service.types, service.modes_accueil),
...(0, from_schema_data_inclusion_fields_1.modalitesAccesFromDataInclusion)([...(service.modes_orientation_beneficiaire ?? []), ...(service.modes_orientation_accompagnateur ?? [])], (0, from_schema_data_inclusion_fields_1.priseRdvFromDataInclusion)(service.prise_rdv)),
...(0, from_schema_data_inclusion_fields_1.presentationFromDataInclusion)(structure.presentation_detail, structure.presentation_resume),
...(0, from_schema_data_inclusion_fields_1.priseRdvFromDataInclusion)(service.prise_rdv),
...ifAnyPublicSpecifiquementAdresseInArray((0, from_schema_data_inclusion_fields_1.publicSpecifiquementAdresseFromDataInclusion)(service.profils)),
...ifAnyPriseEnChargeSpecifiqueInArray((0, from_schema_data_inclusion_fields_1.priseEnChargeSpecifiqueFromDataInclusion)(service.profils)),
...(0, from_schema_data_inclusion_fields_1.structureParenteFromDataInclusion)(structure.structure_parente),
...(structure.typologie == null ? {} : (0, from_schema_data_inclusion_fields_1.typologiesFromDataInclusion)(from_schema_data_inclusion_fields_1.TYPOLOGIES_MAP.get(structure.typologie)))
});
const fromSchemaDataInclusion = (services, structure) => fromSchemaDataInclusionItem(structure, (0, exports.mergeServices)(services, structure));
exports.fromSchemaDataInclusion = fromSchemaDataInclusion;