From 7ffd12dcb09fd8753caf335fe579fced4489003b Mon Sep 17 00:00:00 2001 From: folland87 Date: Wed, 5 Feb 2025 16:31:49 +0100 Subject: [PATCH] dismiss --- .../commons/queries/sirene-updates.query.js | 28 +++++++++++++++++++ src/api/sirene/updates/updates.routes.js | 17 +++++++++++ src/jobs/sirene/api.js | 9 +++--- src/jobs/sirene/index.js | 7 +---- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/api/commons/queries/sirene-updates.query.js b/src/api/commons/queries/sirene-updates.query.js index 394c20bb..5c111160 100644 --- a/src/api/commons/queries/sirene-updates.query.js +++ b/src/api/commons/queries/sirene-updates.query.js @@ -2,14 +2,42 @@ import currentLegalCategoryQuery from './current-legal-category.query'; import currentLocalisationQuery from './current-localisation.query'; import currentNameQuery from './current-name.query'; +const currentSiretQuery = [ + { + $lookup: { + from: 'identifiers', + let: { item: '$id' }, + pipeline: [{ + $match: { + $expr: { + $and: [ + { $eq: ['$resourceId', '$$item'] }, + { $eq: ['$type', 'siret'] }, + { $ne: ['$active', false] }, + ], + }, + }, + }], + as: 'currentSiret', + }, + }, + { + $set: { + currentSiret: { $arrayElemAt: ['$currentSiret', 0] } + } + } +] + const structQuery = [ ...currentLegalCategoryQuery, ...currentLocalisationQuery, ...currentNameQuery, + ...currentSiretQuery, { $project: { _id: 0, id: 1, + currentSiret: { $ifNull: ['$currentSiret', null] }, closureDate: { $ifNull: ['$closureDate', null] }, creationDate: { $ifNull: ['$creationDate', null] }, currentLocalisation: { $ifNull: ['$currentLocalisation', {}] }, diff --git a/src/api/sirene/updates/updates.routes.js b/src/api/sirene/updates/updates.routes.js index 3ede21f8..6e839732 100644 --- a/src/api/sirene/updates/updates.routes.js +++ b/src/api/sirene/updates/updates.routes.js @@ -1,12 +1,29 @@ import express from "express"; +import { ObjectId } from "mongodb"; import controllers from "../../commons/middlewares/crud.middlewares"; import readQuery from "../../commons/queries/sirene-updates.query"; import { sireneUpdatesRepository as repository } from "../../commons/repositories"; +import { patchContext } from "../../commons/middlewares/context.middlewares"; +import { db } from "../../../services/mongo.service"; const router = new express.Router(); router.route("/sirene/updates").get(controllers.list(repository, readQuery)); +router.route("/sirene/updates/:id") + .patch(async (req, res) => { + const { id } = req.params; + const { status } = req.body; + console.log('HERE', status, id) + + const { value } = await db.collection("sirene_updates").findOneAndUpdate( + { _id: new ObjectId(id) }, + { $set: { status } }, + { returnDocument: "after" }, + ); + + res.json(value); + }) export default router; diff --git a/src/jobs/sirene/api.js b/src/jobs/sirene/api.js index 49b6c4a1..26a65361 100644 --- a/src/jobs/sirene/api.js +++ b/src/jobs/sirene/api.js @@ -38,11 +38,12 @@ const fetchPage = async (endpoint, params, cursor) => { const json = await response.json(); - if (json?.header?.statut !== 200) throw new Error(json?.header?.message); + if (json?.header?.statut !== 200 && json?.header?.statut !== 404) throw new Error(json?.header?.message); + const data = json?.[API_CONFIG[endpoint]] ?? []; return { - data: json[API_CONFIG[endpoint]] || [], + data, nextCursor: json.header.curseurSuivant, total: json.header.total }; @@ -63,7 +64,7 @@ async function* sirenePageGenerator(endpoint, params, cursor = '*', total = null yield { data, progress: { - total: total ?? pageTotal, + total: total ?? pageTotal ?? 0, cursor, } }; @@ -90,7 +91,7 @@ const fetchSireneApi = async (endpoint, params) => { results.push(...data); processedCount += data.length; console.log( - `Processed ${processedCount.toLocaleString()}/${progress.total.toLocaleString()} records` + `Processed ${processedCount?.toLocaleString()}/${progress.total?.toLocaleString()} records` ); } diff --git a/src/jobs/sirene/index.js b/src/jobs/sirene/index.js index 8fd11109..c484b33e 100644 --- a/src/jobs/sirene/index.js +++ b/src/jobs/sirene/index.js @@ -46,12 +46,7 @@ export async function monitorSiren(job) { const from = await getLastExecutionDate(); const until = now.toISOString().slice(0, 19); - if (!from) { - return { - status: "failed", - message: "No previous execution" - }; - } + if (!from) job.fail("No previous execution") const siretStockFromPaysage = await getSiretStockFromPaysage(); const sirenUpdatesMap = await fetchLegalUnitUpdates(from, until);