Workers
Le workspace worker, situé dans apps/worker, héberge les workers BullMQ chargés du traitement asynchrone des documents de la pipeline de dépôt. Il s'agit d'un processus NestJS indépendant de l'API afin d'isoler les traitements longs (Playwright, LLM, parsing) du cycle de requêtes HTTP.
Structure
apps/worker/
src/
main.ts # Bootstrap NestJS (port 3001)
app.module.ts # BullModule.forRootAsync + modules de workers
queues/
queues.constants.ts # Registre central des noms de queues
workers/
test/
test.module.ts # Enregistrement de la queue `test`
test.processor.ts # @Processor('test')
test.processor.spec.ts # Test unitaire du traitement de démonstration
test.dto.ts # Payload et résultat typésConfiguration locale
Le worker lit la configuration Redis depuis le .env racine (variables partagées) et sa propre configuration depuis apps/worker/.env (variables spécifiques).
Créer le fichier d'environnement du workspace :
cp apps/worker/.env.example apps/worker/.envLes variables requises sont les suivantes. REDIS_* proviennent du .env racine :
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=passwordapps/worker/.env ne contient que les variables spécifiques au worker :
NODE_ENV=development
WORKER_PORT=3001Le ConfigModule charge d'abord le .env racine, puis le .env local. Ce dernier surcharge le premier en cas de conflit. Aucun de ces fichiers ne doit être commité.
Démarrage
Démarrer le worker en local :
pnpm worker:devLe worker écoute sur le port 3001 (distinct de l'API sur 3000) et se connecte à Redis via BullModule.forRootAsync. Le worker n'expose pas d'endpoints HTTP métier : le port sert uniquement au bootstrap NestJS.
Queues
Le registre central queues.constants.ts déclare les noms de queues. Le nommage suit la pipeline de dépôt de documents :
test: queue de démonstration, valider le setup BullMQ ;preprocess: pré-traitement et validation du document (vérification n° de dossier et trame IMPRIMFIP) ;llm-correction: reformatage automatique par LLM des pages non conformes ;deposit: dépôt IMPRIMFIP via Playwright ou API.
Seule la queue test est active dans ce workspace. Les autres noms sont réservés pour les prochaines étapes.
Worker de test
Le worker test valide le pipeline BullMQ de bout en bout. Il expose :
TestJobData: payload du job,{ message: string };TestJobResult: résultat retourné,{ message: string, processedAt: string }.
Le TestProcessor consomme les jobs de la queue test, journalise le message reçu, simule un traitement asynchrone puis retourne un résultat. Ce worker est un échafaudage destiné à valider le setup ; il sert de modèle pour les futurs workers métier.
Commandes
Toutes les commandes du workspace worker sont exposées depuis la racine du monorepo :
pnpm worker:build
pnpm worker:lint
pnpm worker:format
pnpm worker:format:check
pnpm worker:check
pnpm worker:check:fix
pnpm worker:typecheck
pnpm worker:testpnpm worker:test vérifie que le processor de démonstration consomme le payload attendu et retourne un message traité avec un horodatage valide. Il s'agit d'un test unitaire : Redis n'est pas requis.
Règles de production
- Le worker est un processus distinct de l'API pour isoler les traitements longs.
- Une seule connexion Redis partagée par l'instance via
BullModule.forRoot. - Le mot de passe Redis provient d'un secret de l'orchestrateur ou de Vault.
- Chaque worker métier possède son propre
*.module.tset sa queue déclarée dansqueues.constants.ts.