Skip to content

Commit e48dd46

Browse files
authored
feat(lba-2522): algo data export (#2358)
* feat: export data for algo * feat: optimize
1 parent af338b3 commit e48dd46

File tree

3 files changed

+55
-5
lines changed

3 files changed

+55
-5
lines changed

server/src/jobs/jobs.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import updateDomainesMetiers from "@/jobs/domainesMetiers/updateDomainesMetiers"
66
import { create as createMigration, status as statusMigration, up as upMigration } from "@/jobs/migrations/migrations"
77
import { sendMiseEnRelation } from "@/jobs/miseEnRelation/sendMiseEnRelation"
88
import { importers } from "@/jobs/offrePartenaire/jobsPartners.importer"
9+
import { exportFileForAlgo } from "@/jobs/partenaireExport/exportBlacklistAlgo"
910
import { exportJobsToS3V2 } from "@/jobs/partenaireExport/exportJobsToS3V2"
1011
import { updateReferentielCommune } from "@/services/referentiel/commune/commune.referentiel.service"
1112
import { generateSitemap } from "@/services/sitemap.service"
@@ -183,6 +184,10 @@ export async function setupJobProcessor() {
183184
handler: syncEtablissementsAndFormations,
184185
tag: "main",
185186
},
187+
"Export des offres sur S3 v2": {
188+
cron_string: "0 3 * * *",
189+
handler: () => exportJobsToS3V2(),
190+
},
186191
"Supprime les etablissements dupliqués à cause du parallélisme du job de synchronisation RDVA": {
187192
cron_string: "30 3 * * *",
188193
handler: removeDuplicateEtablissements,
@@ -273,19 +278,18 @@ export async function setupJobProcessor() {
273278
handler: resetInvitationDates,
274279
tag: "main",
275280
},
281+
"Export des données pour l'algorithme": {
282+
cron_string: "0 10 * * FRI",
283+
handler: exportFileForAlgo,
284+
},
276285
"Traitement des recruteur LBA par la pipeline jobs partners": {
277286
cron_string: "0 10 * * SUN",
278287
handler: () => processRecruteursLba(),
279288
tag: "main",
280289
},
281-
"Export des offres sur S3 v2": {
282-
cron_string: "0 3 * * *",
283-
handler: () => exportJobsToS3V2(),
284-
},
285290
"Suppression des contacts Brevo de plus de deux ans": {
286291
cron_string: "0 8 * * SUN",
287292
handler: removeBrevoContacts,
288-
tag: "main",
289293
},
290294
},
291295
jobs: {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { LBA_ITEM_TYPE } from "shared/constants/lbaitem"
2+
3+
import { s3WriteString } from "@/common/utils/awsUtils"
4+
import { getDbCollection } from "@/common/utils/mongodbUtils"
5+
import { notifyToSlack } from "@/common/utils/slackUtils"
6+
7+
const uploadJsonToS3 = async (fileKey: string, data: unknown): Promise<void> => {
8+
await s3WriteString("storage", fileKey, {
9+
Body: JSON.stringify(data, null, 2),
10+
ContentType: "application/json",
11+
})
12+
}
13+
14+
const exportBlacklistAlgo = async (): Promise<void> => {
15+
const [reportedCompanies, unsubscribedCompanies] = await Promise.all([
16+
getDbCollection("reported_companies")
17+
.find({ reason: "Entreprise fermée", type: LBA_ITEM_TYPE.RECRUTEURS_LBA }, { projection: { _id: 0, siret: 1 } })
18+
.toArray(),
19+
getDbCollection("unsubscribedrecruteurslba")
20+
.find({}, { projection: { _id: 0, siret: 1 } })
21+
.toArray(),
22+
])
23+
24+
const uniqueSiret = [...new Set([...reportedCompanies, ...unsubscribedCompanies].map((company) => company.siret))]
25+
26+
await uploadJsonToS3("blacklist-algo.json", uniqueSiret)
27+
await notifyToSlack({ subject: "Fichier de blacklist pour l'algorithme", message: `${uniqueSiret.length} siret exportés` })
28+
}
29+
30+
const exportApplications = async (): Promise<void> => {
31+
const applications = await getDbCollection("applications")
32+
.find({ job_origin: LBA_ITEM_TYPE.RECRUTEURS_LBA }, { projection: { _id: 1, company_siret: 1, created_at: 1 } })
33+
.toArray()
34+
35+
await uploadJsonToS3("applications-algo.json", applications)
36+
await notifyToSlack({ subject: "Fichier des candidatures pour l'algorithme", message: `${applications.length} candidatures exportées` })
37+
}
38+
39+
export const exportFileForAlgo = async (): Promise<void> => {
40+
await Promise.all([exportBlacklistAlgo(), exportApplications()])
41+
}

server/src/jobs/simpleJobDefinitions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { processRecruteursLba } from "@/jobs/offrePartenaire/recruteur-lba/proce
2222
import { processRhAlternance } from "@/jobs/offrePartenaire/rh-alternance/processRhAlternance"
2323
import { analyzeClosedCompanies } from "@/jobs/oneTimeJob/analyzeClosedCompanies"
2424
import { renvoiMailCreationCompte } from "@/jobs/oneTimeJob/renvoiMailCreationCompte"
25+
import { exportFileForAlgo } from "@/jobs/partenaireExport/exportBlacklistAlgo"
2526
import { exportJobsToS3V2 } from "@/jobs/partenaireExport/exportJobsToS3V2"
2627
import { exportJobsToFranceTravail } from "@/jobs/partenaireExport/exportToFranceTravail"
2728
import { repriseEnvoiEmailsPRDV } from "@/jobs/rdv/repriseEnvoiPRDV"
@@ -371,4 +372,8 @@ export const simpleJobDefinitions: SimpleJobDefinition[] = [
371372
fct: removeBrevoContacts,
372373
description: "Anonymise les contacts Brevo dont la date de creation est supérieure à 2 ans",
373374
},
375+
{
376+
fct: exportFileForAlgo,
377+
description: "Export des données pour l'algorithme des recruteurs",
378+
},
374379
]

0 commit comments

Comments
 (0)