Aller au contenu principal

Conventions d’injection de dépendances (backend NestJS)

Dernière mise à jour : 2026-02-27
Référence détaillée : AGENTS_BACKEND.md (documentation interne) (structure des modules, Core Modules, interfaces).

Principes

  • Services : @Injectable() et enregistrement dans le providers du module.
  • Contrôleurs : déclarés dans controllers du module ; injection des services via le constructeur.
  • Tokens d’interface : pour éviter les dépendances circulaires, utiliser un token symbolique + interface (voir Core Modules ci‑dessous).
  • Logger : injecter via @Inject('LoggerService') et utiliser initializeLogger(logger, ClassName.name) pour un logger typé.

Modules

  • Un module NestJS = un répertoire src/<domaine>/ avec <domaine>.module.ts, contrôleurs, services, DTO.
  • Les modules “métier” sont agrégés dans ApiDomainModule (ou équivalent) et importés dans AppModule.
  • Ne jamais utiliser forwardRef() : en cas de cycle, extraire un Core Module.

Core Modules (dépendances circulaires)

  1. Créer une interface et un token dans <domaine>.interface.ts.
  2. Créer un Core Module (<domaine>-core.module.ts) qui ne dépend que de l’infra (Db, Config, Logger) et qui exporte le service via { provide: TOKEN, useClass: MyService }.
  3. Le module “complet” importe le Core Module et les autres modules métier.
  4. Dans les consommateurs, injecter avec @Inject(TOKEN).

Exemples existants : StorageCoreModule, SearchCoreModule, AgentCoreModule, etc. Détails dans AGENTS_BACKEND.md (documentation interne).

Tests

  • Les tests unitaires mockent les dépendances (services, repo) et n’utilisent pas le conteneur Nest.
  • Pour les helpers (ex. ActionHelpers, EntitySearchHelper), instancier la classe avec des mocks (logger, searchService) dans les specs.