From dd735e55af6ab0740e7cbdf200cf2afbb25b9ee1 Mon Sep 17 00:00:00 2001 From: Mihoub Debache Date: Thu, 1 Feb 2024 09:30:20 +0100 Subject: [PATCH] feat(jobs): add prizes jobs to creat dataset --- src/api/opendata/opendata.routes.js | 2 + src/jobs/index.js | 2 + src/jobs/opendata/fr-esr-paysage_prix.js | 54 ++++++++++++++++++++++++ src/jobs/opendata/index.js | 1 + 4 files changed, 59 insertions(+) create mode 100644 src/jobs/opendata/fr-esr-paysage_prix.js diff --git a/src/api/opendata/opendata.routes.js b/src/api/opendata/opendata.routes.js index b91901ed..7c697ea0 100644 --- a/src/api/opendata/opendata.routes.js +++ b/src/api/opendata/opendata.routes.js @@ -13,6 +13,8 @@ const FILTERS = { 'fr-esr-paysage_structures_identifiants': { dataset: 'fr-esr-paysage_structures_identifiants' }, 'fr-esr-paysage_personnes_identifiants': { dataset: 'fr-esr-paysage_personnes_identifiants' }, 'fr-esr-paysage_structures_websites': { dataset: 'fr-esr-paysage_structures_websites' }, + 'fr-esr-paysage_prix': { dataset: 'fr-esr-paysage_prix' }, + }; router.route('/opendata/:datasetId') diff --git a/src/jobs/index.js b/src/jobs/index.js index 88a2f287..82d2222e 100644 --- a/src/jobs/index.js +++ b/src/jobs/index.js @@ -18,6 +18,7 @@ import { exportFrEsrStructureIdentifiers, exportFrEsrPersonIdentifiers, exportFrEsrStructureWebsites, + exportFrEsrPrizes, } from './opendata'; import synchronizeAnnuaireCollection from './synchronize/annuaire-collection'; import synchronizeCuriexploreActors from './synchronize/curiexplore-actors'; @@ -38,6 +39,7 @@ agenda.define('send recovery email', { shouldSaveResult: true }, sendPasswordRec agenda.define('send contact email', { shouldSaveResult: true }, sendContactEmail); agenda.define('update key numbers', { shouldSaveResult: true }, updateKeyNumbers); agenda.define('reindex', { shouldSaveResult: true }, reindex); +agenda.define('export fr-esr-paysage_prix', { shouldSaveResult: true }, exportFrEsrPrizes); agenda.define('export fr-esr-paysage_structures_identifiants', { shouldSaveResult: true }, exportFrEsrStructureIdentifiers); agenda.define('export fr-esr-paysage_personnes_identifiants', { shouldSaveResult: true }, exportFrEsrPersonIdentifiers); agenda.define('export fr-esr-paysage-fonctions-gourvernance', { shouldSaveResult: true }, exportFrEsrPaysageFonctionsGourvernance); diff --git a/src/jobs/opendata/fr-esr-paysage_prix.js b/src/jobs/opendata/fr-esr-paysage_prix.js new file mode 100644 index 00000000..ff917481 --- /dev/null +++ b/src/jobs/opendata/fr-esr-paysage_prix.js @@ -0,0 +1,54 @@ +import { client, db } from '../../services/mongo.service'; + +const dataset = 'fr-esr-paysage_prix'; + +export default async function exportFrEsrPrizes() { + const json = await db.collection('prizes').aggregate([ + { + $lookup: { + from: 'relationships', + let: { prizeId: '$id' }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { $eq: ['$resourceId', '$$prizeId'] }, + { $eq: ['$relationTag', 'prix-porteur'] }, + ], + }, + }, + }, + ], + as: 'relationshipData', + }, + }, + { + $project: { + dataset, + id_paysage: '$id', + nameFr: '$nameFr', + nameEn: '$nameEn', + descriptionFr: '$descriptionFr', + descriptionEn: '$descriptionEn', + relatedObjectId: { + $ifNull: [{ $arrayElemAt: ['$relationshipData.relatedObjectId', 0] }, null], + }, + }, + }, + { + $match: { + id_paysage: { $exists: true }, + }, + }, + ]).toArray(); + + const session = client.startSession(); + await session.withTransaction(async () => { + await db.collection('opendata').deleteMany({ dataset }); + await db.collection('opendata').insertMany(json); + await session.endSession(); + }); + + return { status: 'success', location: `/opendata/${dataset}` }; +} diff --git a/src/jobs/opendata/index.js b/src/jobs/opendata/index.js index 607b9c47..e2dbbf0e 100644 --- a/src/jobs/opendata/index.js +++ b/src/jobs/opendata/index.js @@ -3,3 +3,4 @@ export { default as exportFrEsrAnnelisPaysageEtablissements } from './fr-esr-ann export { default as exportFrEsrStructureIdentifiers } from './fr-esr-paysage_structures_identifiants'; export { default as exportFrEsrPersonIdentifiers } from './fr-esr-paysage_personnes_identifiants'; export { default as exportFrEsrStructureWebsites } from './fr-esr-paysage_structures_websites'; +export { default as exportFrEsrPrizes } from './fr-esr-paysage_prix';