Aller au contenu

Audit de conformité — Modules BackEnd vs Guide Architecture DDD

Date : 2026-06-15 23:37 Référence : 1_GUIDE_ARCHITECTURE_DDD.md (sections 1-13, 29 règles absolues) Périmètre : 17 modules — BackEnd/src/Modules/ Auditeur : Claude Sonnet 4.6 (mission automatisée)


Synthèse exécutive

Module Statut Violations P1 Warnings Score
Accompagnements PARTIELLEMENT CONFORME 1 (règle 5 ×5) 1 85%
Administration CONFORME 0 1 97%
Audit PARTIELLEMENT CONFORME 1 (Zod dans domain/schemas) 0 90%
Auth PARTIELLEMENT CONFORME 3 (règles 5×2UC+repos, 23×2) 4 75%
Enfants CONFORME 0 0 100%
Evaluations PARTIELLEMENT CONFORME 2 (règle 5, SCHEMA_GAP) 0 80%
Formations CONFORME 0 2 95%
ImportExcel CONFORME 0 0 100%
Insertion CONFORME 0 0 100%
MaitresCoraniques CONFORME 0 0 100%
Mobilisation PARTIELLEMENT CONFORME 1 (update sans idUtilisateur) 3 88%
Parents CONFORME 0 1 97%
Pilotage PARTIELLEMENT CONFORME 1 (règle 5) 3 88%
Rapports CONFORME 0 1 97%
Referentiels PARTIELLEMENT CONFORME 2 (règle 5 ×10+, SCHEMA_GAP) 1 78%
Synchronisation CONFORME 0 1 97%
Tuteurs CONFORME 0 0 100%

Score global de conformité

  • 10 modules CONFORMES : Administration, Enfants, Formations, ImportExcel, Insertion, MaitresCoraniques, Parents, Rapports, Synchronisation, Tuteurs
  • 7 modules PARTIELLEMENT CONFORMES : Accompagnements, Audit, Auth, Evaluations, Mobilisation, Pilotage, Referentiels
  • 0 modules NON CONFORMES

Score global : 10/17 conformes (59%) — objectif : 17/17 (100%)


Points de conformité remarquables (toute la base de code)

Ces éléments sont exemplaires et non-triviaux :

  • Règle 3executer() partout (aucun execute(), run(), process() détecté)
  • Règle 7 — Zéro z.string().uuid() — tous les IDs utilisent z.string().min(1) (CUIDs)
  • Règle 9 — Ordre DI correct dans 17/17 modules (repositories → services → use cases → controllers)
  • Règle 1 — Aucun PrismaClient ni express dans les use cases
  • Règle 22 — Zéro .then() dans toute la base de code
  • Règle 18 — Arrow functions dans 17/17 ModuleControllers
  • Règle 17 — Factory functions dans 100% des controllers individuels
  • Règle 8req.utilisateur utilisé partout, req.user absent de tous les ModuleControllers
  • Règle 21 — Aucun import relatif profond (../../../) — alias @/ systématiquement utilisé
  • Règle 13 — Audit non-bloquant (try/catch séparé) dans tous les use cases
  • Règle 27-28$transaction uniquement dans les repositories (jamais dans les use cases)
  • Règle 4succes: boolean + message: string présents dans 100% des interfaces use case
  • Règle 12 — Suffixe UseCase systématique sur toutes les interfaces et implémentations
  • ✅ Tous les handlers étendent BaseActionHandler (190/190 handlers réels — excluant les barrel index.ts)
  • ✅ Toutes les exceptions étendent ErreurMetier (jamais Error directement)

Détail par module


Module Accompagnements — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure 5 couches complète (domain, application, infrastructure, interface-adapters, index.ts)
  • 13/13 handlers étendent BaseActionHandler
  • Exceptions conformes (ErreurAccompagnement extends ErreurMetier, this.name, captureStackTrace)
  • ServiceValidation présent (ServiceValidationAccompagnements.ts)
  • Arrow functions dans AccompagnementsModuleController.ts
  • Factory functions dans tous les controllers
  • Routes avec préfixe /api/v1/esm/accompagnements
  • Audit non-bloquant (try/catch séparé dans ETAPE 3)
  • Ordre DI correct

⚠️ Warnings

  • ETAPE 3 audit : utilise this.logger.info(...) au lieu d'un IAuditLogRepository — l'audit est non-bloquant ✅ mais ce n'est pas une traçabilité persistante en base

❌ Violations (règles absolues)

  • RÈGLE 5throw new Error() brut dans executerLogique() au lieu de throw new ErreurAccompagnement() :
  • CreerAccompagnementUseCase.ts:61const err = new Error('Enfant introuvable') → doit être throw new ErreurAccompagnement('Enfant introuvable', 'ENFANT_INTROUVABLE')
  • CreerAccompagnementUseCase.ts:68const err = new Error('Type accompagnement introuvable') → idem
  • CreerSuiviUseCase.ts:60const err = new Error('Accompagnement introuvable')
  • CreerSuiviUseCase.ts:66const err = new Error('Accompagnement terminé ou abandonné')
  • ModifierCasOrienteUseCase.ts:74const err = new Error('Cas orienté introuvable')
  • ModifierAccompagnementUseCase.ts:66const err = new Error('Accompagnement introuvable')
  • CreerCasOrienteUseCase.ts:60const err = new Error('Accompagnement introuvable')

Correction : dans chaque cas, remplacer par throw new ErreurAccompagnement(message, 'CODE_ERREUR'). Le type union ErreurTypeAccompagnement doit inclure les codes correspondants. Impact : gererErreur() retourne actuellement ERREUR_SERVEUR au lieu du code métier précis.


Module Administration — CONFORME

✅ Points conformes

  • Structure 5 couches complète
  • 7/7 handlers étendent BaseActionHandler
  • Exceptions conformes (ErreurAdministration extends ErreurMetier, this.name, captureStackTrace)
  • ServiceValidation présent
  • Arrow functions, factory functions, DI ordre correct
  • Routes /api/v1/esm/administration
  • Pas d'entités domain (acceptable pour un module de gestion utilisateurs)

⚠️ Warnings

  • AdministrationRepositoryPrisma.ts:157throw new Error('Utilisateur ${id} introuvable après modification') dans une vérification post-update en infrastructure (non-critique car dans un repository, pas un use case)

Module Audit — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure 5 couches (sans entités — acceptable pour module de consultation de logs)
  • 2/2 handlers étendent BaseActionHandler
  • Exceptions conformes (ErreurAudit extends ErreurMetier, this.name, captureStackTrace)
  • ServiceValidation présent
  • Arrow functions, factory functions, DI ordre correct
  • Routes /api/v1/esm/audit

❌ Violations (règles absolues)

  • RÈGLE 5 (structure)Audit/domain/schemas/audit.schemas.ts contient des schémas Zod réels (FiltresAuditLogSchema, ObtenirLogAuditSchema) en plus des constantes string.

Le guide (section 4.5) spécifie : domain/schemas/ = constantes STRING uniquement. Les schémas Zod réels doivent être dans infrastructure/schemas/zod/.

Correction : 1. Garder dans domain/schemas/audit.schemas.ts uniquement : export const schemaFiltresAuditLog = 'audit.filtresAuditLog' 2. Déplacer FiltresAuditLogSchema et ObtenirLogAuditSchema vers Audit/infrastructure/schemas/zod/filtresAuditLog.schemas.ts 3. Mettre à jour les imports dans ServiceValidationAudit.ts


Module Auth — PARTIELLEMENT CONFORME

✅ Points conformes

  • 35/35 handlers étendent BaseActionHandler (7 fichiers index.ts barrel exclus)
  • Arrow functions dans AuthModuleController.ts (34 méthodes)
  • req.utilisateur utilisé (commentaire documenté dans le code)
  • $transaction présent dans UtilisateurRepositoryPrisma.ts:189,238 (créerAvecCodeVerification, supprimerAvecSessions)
  • Toutes les exceptions de AuthExceptions.ts étendent ErreurMetier
  • this.name assigné dans toutes les classes d'exceptions Auth
  • AuditLogRepository utilisé pour l'audit dans plusieurs use cases (DeconnexionUseCase, Verifier2FAUseCase, etc.)

⚠️ Warnings

  • Règle 11captureStackTrace absent de AuthExceptions.ts (12 classes) et ExpirationExceptions.ts (4 classes). La classe parente ErreurMetier l'appelle dans son constructeur, ce qui offre une protection partielle, mais le guide exige l'appel explicite dans CHAQUE constructeur enfant.
  • NamingauthValidation.ts aurait dû être nommé ServiceValidationAuth.ts (convention section 12)
  • Routes — Situées dans shared/infrastructure/http/routes/ au lieu de Auth/infrastructure/http/routes/ (répertoire existe mais est vide). Déviation architecturale probablement intentionnelle pour l'accès public des routes d'authentification.
  • Fichiers parasitesInscrireUtilisateur.ts (165 octets, re-export simple) et InscrireUtilisateur.ts.bak dans Auth/application/usecases/ — à supprimer.

❌ Violations (règles absolues)

  • RÈGLE 5throw new Error() brut dans des use cases :
  • VerifierNouvelEmailUseCase.ts:195throw new Error('Échec de la mise à jour de l\'email') → doit être throw new ErreurChangerEmail(..., 'ERREUR_SERVEUR')
  • ChangerMotDePasseUseCase.ts:159throw new Error('Échec de la mise à jour du mot de passe') → doit être throw new ErreurMotDePasse(..., 'ERREUR_SERVEUR')

  • RÈGLE 5 — Nombreux throw new Error() dans les repositories Auth (infrastructure — moins critique mais détectable) :

  • TokenResetRepositoryPrisma.ts — 10+ occurrences (lignes 49, 68, 87, 118, 161, 180, 223, 249, 269, 296)
  • SessionAuthRepositoryPrisma.ts — 12+ occurrences (lignes 61, 87, 106, 128, 164, 196, 252, 283, 302, 318, 336, 358, 378)

Correction : Dans les repositories, throw new Error() peut être toléré aux frontières infrastructure si la classe métier correspondante n'est pas disponible. Mais il est préférable de créer des types d'erreur infrastructure ou de propager les erreurs Prisma directement.

  • RÈGLE 23 — Logger avec template literals dans Auth/infrastructure/services/authValidation.ts :
  • Ligne 259 : this.logger.warn(`Schéma auth inconnu: ${nomSchema}`, ...) → doit être this.logger.warn('Schéma auth inconnu', { nomSchema })
  • Ligne 611 : this.logger.info(`Pas de règles métier auth spécifiques pour: ${nomSchema}`) → doit être this.logger.info('Pas de règles métier auth spécifiques', { nomSchema })

Module Enfants — CONFORME

✅ Points conformes

  • Structure 5 couches complète
  • 5/5 handlers conformes
  • Entité Enfant : creer(), depuisDB(), versObjetPlain(), versObjetPlainPublic()
  • Exceptions conformes
  • Toutes les règles respectées

Module Evaluations — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure 5 couches complète
  • 5/5 handlers étendent BaseActionHandler
  • Exceptions conformes (ErreurEvaluation extends ErreurMetier, captureStackTrace, this.name)
  • ServiceValidation présent

❌ Violations (règles absolues)

  • RÈGLE 5CreerEvaluationUseCase.ts:55throw Object.assign(new Error("Enfant introuvable"), { code: 'ENFANT_INTROUVABLE' }) — pattern non-typé → doit être throw new ErreurEvaluation('Enfant introuvable', 'ENFANT_INTROUVABLE')

  • SCHEMA_GAP critiqueEvaluationRepositoryPrisma.ts (et ConfigCritereRepositoryPrisma.ts dans Referentiels) : les modèles evaluationVulnerabilite et configCritere sont absents du schéma Prisma. Toutes les méthodes du repository sont des stubs qui throwent new Error('SCHEMA_GAP...'). Ce module est non-fonctionnel en production tant que les modèles ne sont pas ajoutés au schéma.

Correction : 1. Ajouter les modèles EvaluationVulnerabilite et ConfigCritere dans prisma/schema.prisma 2. Exécuter npx prisma db push 3. Implémenter EvaluationRepositoryPrisma.ts et ConfigCritereRepositoryPrisma.ts 4. Remplacer throw new Error('SCHEMA_GAP...') par de vraies implémentations Prisma


Module Formations — CONFORME

✅ Points conformes

  • Structure complète avec sous-modules (Formation + Sensibilisation)
  • 26/26 handlers conformes
  • Exceptions multiples bien structurées (ErreurFormation, ErreurSupportCommunication, ErreurDistributionSupport, ErreurEmissionRadio, ErreurEducateurPair)
  • $transaction dans FormationRepositoryPrisma.ts:218 pour ajouterParticipationAvecCompteur()
  • Deux fichiers de routes (formations.module.routes.ts, sensibilisation.module.routes.ts) correctement déclarés
  • Deux ModuleControllers (FormationsModuleController, SensibilisationModuleController)

⚠️ Warnings

  • SupportCommunicationRepositoryPrisma.ts:83delete({ where: { id } }) sans idUtilisateur après un findFirst({ where: { id, idUtilisateur } }). Le pattern 2-étapes (vérifier puis supprimer) n'est pas atomique. Utiliser deleteMany({ where: { id, idUtilisateur } }) directement.
  • Mapper nommé mapperVersDTO() au lieu de mapper() (convention guide utilise mapper)

Module ImportExcel — CONFORME

✅ Points conformes

  • Structure complète
  • $transaction dans ImportExcelRepositoryPrisma.ts:170
  • Handler et patterns conformes

Module Insertion — CONFORME

✅ Points conformes

  • Structure complète
  • 6/6 handlers conformes
  • Exceptions conformes (captureStackTrace, this.name)
  • Transactions correctement placées dans les repositories

Module MaitresCoraniques — CONFORME

✅ Points conformes

  • Structure complète
  • 5/5 handlers conformes
  • Entité MaitreCoranique : creer(), depuisDB(), versObjetPlain(), versObjetPlainPublic()
  • Exceptions conformes

Module Mobilisation — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure complète
  • 29/29 handlers conformes
  • Exceptions conformes (ErreurMobilisation extends ErreurMetier)
  • $transaction pour les opérations atomiques

⚠️ Warnings

  • Préfixe routes : /api/v1/mobilisation — manque le /esm/ (convention projet : /api/v1/esm/...)
  • SessionConcertationRepositoryPrisma.ts:50.update({ where: { id, cadreConcertationId, idUtilisateur } }) : le multi-tenant est correct dans le where mais le guide exige .updateMany() pour ne pas lever d'exception si l'enregistrement n'appartient pas à l'utilisateur
  • SessionConcertationRepositoryPrisma.ts:66.delete({ where: { id, cadreConcertationId, idUtilisateur } }) — même remarque (utiliser .deleteMany())

❌ Violations (règles absolues)

  • RÈGLE multi-tenant (dérivée de section 6.1) — CadreConcertationRepositoryPrisma.ts:36.update({ where: { id } }) sans filtre idUtilisateur. Si CadreConcertation est une entité multi-tenant (appartenant à un utilisateur), c'est une faille de sécurité potentielle permettant à un utilisateur de modifier les données d'un autre.

Correction : vérifier si cadreConcertation a un champ idUtilisateur. Si oui, ajouter le filtre : updateMany({ where: { id, idUtilisateur }, data: ... })


Module Parents — CONFORME

✅ Points conformes

  • Structure complète
  • 6/6 handlers conformes
  • Entité Parent : creer(), depuisDB(), versObjetPlainPublic()
  • Exceptions conformes

⚠️ Warnings

  • Entité Parent : versObjetPlain() (sérialisation interne) absent — seul versObjetPlainPublic() présent. Mineur car le guide préconise les deux mais seul le public est obligatoire en HTTP.

Module Pilotage — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure complète
  • 13/13 handlers conformes
  • Exceptions conformes (ErreurPilotage extends ErreurMetier, captureStackTrace, this.name)
  • Entités IndicateurSuivi, EtudeDiagnostique, MesureIndicateur : creer(), depuisDB(), versObjetPlain(), versObjetPlainPublic()

⚠️ Warnings

  • Préfixe routes : /api/v1/pilotage — manque le /esm/ (convention projet)
  • Mapper nommé mapToDTO() au lieu de mapper() dans IndicateurSuiviRepositoryPrisma.ts (convention guide utilise mapper)
  • MesureIndicateurRepositoryPrisma.ts et EtudeDiagnostiqueRepositoryPrisma.ts : pas de private mapper() détecté

❌ Violations (règles absolues)

  • RÈGLE 5SaisirMesureUseCase.ts:52const err = new Error('Indicateur introuvable') puis throw err → doit être throw new ErreurPilotage('Indicateur introuvable', 'INDICATEUR_INTROUVABLE')

Module Rapports — CONFORME

✅ Points conformes

  • Structure complète
  • 7/7 handlers conformes
  • Exceptions conformes
  • Module de consultation agrégée (non-multi-tenant par conception)

⚠️ Warnings

  • RapportsRepositoryPrisma.ts : pas de méthode private mapper() dédiée — mapping inline dans chaque méthode

Module Referentiels — PARTIELLEMENT CONFORME

✅ Points conformes

  • Structure complète (sans entités — référentiels sont des données partagées)
  • 22/22 handlers conformes
  • Exceptions conformes (ErreurReferentiels extends ErreurMetier)
  • Données non-multi-tenant pour les référentiels partagés (Communes, Types) — update/delete sans idUtilisateur ACCEPTABLE pour ces entités

⚠️ Warnings

  • PersonneRessourceRepositoryPrisma.ts : findUnique({ where: { id } }) et delete({ where: { id } }) sans idUtilisateur — à vérifier si PersonneRessource est multi-tenant

❌ Violations (règles absolues)

  • RÈGLE 5 — Pattern throw Object.assign(new Error(), { code }) dans 10+ use cases Referentiels au lieu de throw new ErreurReferentiels() :
  • ObtenirProfilUtilisateurUseCase.ts:52
  • ObtenirPersonneRessourceUseCase.ts:38
  • ObtenirTypeAccompagnementUseCase.ts:52
  • SupprimerPersonneRessourceUseCase.ts:38
  • SupprimerCommuneUseCase.ts:52,57
  • SupprimerTypeAccompagnementUseCase.ts:52,57
  • ModifierPersonneRessourceUseCase.ts:51
  • ModifierProfilUtilisateurUseCase.ts:54
  • CreerTypeAccompagnementUseCase.ts:54

Correction : Remplacer throw Object.assign(new Error('...'), { code: '...' }) par throw new ErreurReferentiels('...', '...'). Le type union ErreurTypeReferentiels doit contenir les codes PROFIL_INTROUVABLE, PERSONNE_INTROUVABLE, TYPE_INTROUVABLE, COMMUNE_INTROUVABLE, TYPE_CODE_DEJA_EXISTANT.

  • SCHEMA_GAP critiqueConfigCritereRepositoryPrisma.ts:37 : le modèle configCritere est absent du schéma Prisma. Toutes les méthodes sont des stubs. La fonctionnalité Critères est non-fonctionnelle.

Correction : Ajouter le modèle ConfigCritere dans prisma/schema.prisma + npx prisma db push + implémenter le repository.


Module Synchronisation — CONFORME

✅ Points conformes

  • Structure complète
  • 2/2 handlers conformes
  • Entité ResultatSync : creer(), depuisDB(), versObjetPlain(), versObjetPlainPublic()
  • Exceptions conformes

⚠️ Warnings

  • SynchronisationRepositoryPrisma.ts:385.update() dans un contexte de synchronisation en boucle — à vérifier si le multi-tenant est bien protégé dans ce contexte

Module Tuteurs — CONFORME

✅ Points conformes

  • Structure 5 couches complète
  • 5/5 handlers conformes
  • Entité Tuteur : creer(), depuisDB(), versObjetPlain(), versObjetPlainPublic()
  • Exceptions conformes

Violations critiques — Liste consolidée (P1)

RÈGLE 5 — Exceptions typées obligatoires (extends ErreurMetier)

Pattern illicite le plus fréquent : throw new Error('...') dans executerLogique()

Fichier Ligne Violation Correction
Accompagnements/usecases/CreerAccompagnementUseCase.ts 61, 68 const err = new Error(...) throw new ErreurAccompagnement(msg, code)
Accompagnements/usecases/CreerSuiviUseCase.ts 60, 66 idem idem
Accompagnements/usecases/ModifierCasOrienteUseCase.ts 74 idem idem
Accompagnements/usecases/ModifierAccompagnementUseCase.ts 66 idem idem
Accompagnements/usecases/CreerCasOrienteUseCase.ts 60 idem idem
Auth/usecases/VerifierNouvelEmailUseCase.ts 195 throw new Error(...) throw new ErreurChangerEmail(..., 'ERREUR_SERVEUR')
Auth/usecases/ChangerMotDePasseUseCase.ts 159 throw new Error(...) throw new ErreurMotDePasse(..., 'ERREUR_SERVEUR')
Evaluations/usecases/CreerEvaluationUseCase.ts 55 Object.assign(new Error, {code}) throw new ErreurEvaluation(msg, code)
Pilotage/usecases/SaisirMesureUseCase.ts 52 const err = new Error(...) throw new ErreurPilotage(msg, 'INDICATEUR_INTROUVABLE')
Referentiels/usecases/Obtenir*.ts (×3) 38-52 Object.assign(new Error, {code}) throw new ErreurReferentiels(msg, code)
Referentiels/usecases/Supprimer*.ts (×4) 38-57 idem idem
Referentiels/usecases/Modifier*.ts (×2) 51-54 idem idem
Referentiels/usecases/CreerTypeAccompagnementUseCase.ts 54 idem idem

Impact comportemental : gererErreur() ne reconnaît pas Error comme ErreurXxx, donc retourne ERREUR_SERVEUR au lieu du code métier précis. Le HTTP status 500 est retourné pour des erreurs 404 ou 409.

RÈGLE 5 — Structure : Zod dans domain/schemas

Fichier Violation Correction
Audit/domain/schemas/audit.schemas.ts Contient FiltresAuditLogSchema et ObtenirLogAuditSchema (Zod) Déplacer vers Audit/infrastructure/schemas/zod/

RÈGLE 23 — Logger avec template literals

Fichier Ligne Violation Correction
Auth/infrastructure/services/authValidation.ts 259 Template literal dans this.logger.warn(\...`)|this.logger.warn('Schéma auth inconnu', { nomSchema })`
Auth/infrastructure/services/authValidation.ts 611 idem this.logger.info('Pas de règles métier spécifiques', { nomSchema })

SCHEMA_GAP — Modèles Prisma manquants

Module Repository Modèles manquants Impact
Evaluations EvaluationRepositoryPrisma.ts evaluationVulnerabilite Module non-fonctionnel
Referentiels ConfigCritereRepositoryPrisma.ts configCritere Critères non-fonctionnels

Recommandations par priorité

P1 — Violations critiques à corriger immédiatement

P1.1 — Corriger tous les throw new Error() dans les use cases (RÈGLE 5)

Impact : comportement silencieusement incorrect (500 retourné au lieu de 404/409).

// ❌ ACTUEL
const err = new Error('Enfant introuvable');
(err as any).code = 'ENFANT_INTROUVABLE';
throw err;

// ✅ CORRECT
throw new ErreurAccompagnement('Enfant introuvable', 'ENFANT_INTROUVABLE');

Modules concernés : Accompagnements (7 occurrences), Referentiels (10 occurrences), Auth (2 occurrences), Evaluations (1), Pilotage (1).

P1.2 — Combler les SCHEMA_GAP Prisma

Ajouter les modèles manquants dans prisma/schema.prisma puis npx prisma db push : - EvaluationVulnerabilite pour le module Evaluations - ConfigCritere pour le module Referentiels

P1.3 — Déplacer le Zod hors de Audit/domain/schemas/

Créer Audit/infrastructure/schemas/zod/filtresAudit.schemas.ts et y déplacer FiltresAuditLogSchema.

P2 — Patterns obligatoires partiellement manquants

P2.1 — Renommer authValidation.ts en ServiceValidationAuth.ts

Et le déplacer dans Auth/infrastructure/services/validation/ServiceValidationAuth.ts (convention section 12).

P2.2 — Ajouter captureStackTrace dans AuthExceptions.ts et ExpirationExceptions.ts

Dans chaque constructeur d'exception Auth, ajouter après this.name = '...' :

Error.captureStackTrace(this, this.constructor);

P2.3 — Corriger CadreConcertationRepositoryPrisma.ts:36

Vérifier si cadreConcertation est multi-tenant et ajouter idUtilisateur dans le where si nécessaire. Utiliser updateMany.

P3 — Conventions de nommage à corriger

P3.1 — Préfixes routes incohérents

  • Mobilisation/mobilisation.module.routes.ts : changer /api/v1/mobilisation/api/v1/esm/mobilisation
  • Pilotage/pilotage.module.routes.ts : changer /api/v1/pilotage/api/v1/esm/pilotage

P3.2 — Corriger delete/update vers deleteMany/updateMany dans Formations et Mobilisation

  • Formations/SupportCommunicationRepositoryPrisma.ts:83deleteMany({ where: { id, idUtilisateur } })
  • Mobilisation/SessionConcertationRepositoryPrisma.ts:50.updateMany()
  • Mobilisation/SessionConcertationRepositoryPrisma.ts:66.deleteMany()

P3.3 — Corriger le logger dans authValidation.ts (voir P1.3)

P3.4 — Supprimer les fichiers parasites Auth

  • Auth/application/usecases/InscrireUtilisateur.ts (re-export inutile)
  • Auth/application/usecases/InscrireUtilisateur.ts.bak (fichier backup non versionnable)

P4 — Améliorations recommandées (non-obligatoires)

  • Ajouter private mapper() dans les repositories qui utilisent du mapping inline (Rapports, Evaluations stubs, Pilotage)
  • Ajouter versObjetPlain() dans l'entité Parent
  • Déplacer les routes Auth de shared/infrastructure/http/routes/ vers Auth/infrastructure/http/routes/ pour la cohérence structurelle

Règles non vérifiables automatiquement

Règle Description Action manuelle
Règle 19 prisma db push — jamais migrate dev Vérifier les scripts CI/CD et package.json
Règle 24 .env — pas de # sans guillemets Auditer .env manuellement (non versionné)
Règle 25 BullMQ — host, port, password explicites Vérifier la configuration BullMQ si utilisée
Règle 20 Redémarrer tsx watch après nouveaux fichiers Procédure opérationnelle, non vérifiable

Rapport généré le 2026-06-15 23:37 par audit automatisé (17 modules, 300+ fichiers analysés)