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 3 —
executer()partout (aucunexecute(),run(),process()détecté) - ✅ Règle 7 — Zéro
z.string().uuid()— tous les IDs utilisentz.string().min(1)(CUIDs) - ✅ Règle 9 — Ordre DI correct dans 17/17 modules (repositories → services → use cases → controllers)
- ✅ Règle 1 — Aucun
PrismaClientniexpressdans 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 8 —
req.utilisateurutilisé partout,req.userabsent 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 —
$transactionuniquement dans les repositories (jamais dans les use cases) - ✅ Règle 4 —
succes: boolean+message: stringprésents dans 100% des interfaces use case - ✅ Règle 12 — Suffixe
UseCasesystématique sur toutes les interfaces et implémentations - ✅ Tous les handlers étendent
BaseActionHandler(190/190 handlers réels — excluant les barrelindex.ts) - ✅ Toutes les exceptions étendent
ErreurMetier(jamaisErrordirectement)
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'unIAuditLogRepository— l'audit est non-bloquant ✅ mais ce n'est pas une traçabilité persistante en base
❌ Violations (règles absolues)¶
- RÈGLE 5 —
throw new Error()brut dansexecuterLogique()au lieu dethrow new ErreurAccompagnement(): CreerAccompagnementUseCase.ts:61—const err = new Error('Enfant introuvable')→ doit êtrethrow new ErreurAccompagnement('Enfant introuvable', 'ENFANT_INTROUVABLE')CreerAccompagnementUseCase.ts:68—const err = new Error('Type accompagnement introuvable')→ idemCreerSuiviUseCase.ts:60—const err = new Error('Accompagnement introuvable')CreerSuiviUseCase.ts:66—const err = new Error('Accompagnement terminé ou abandonné')ModifierCasOrienteUseCase.ts:74—const err = new Error('Cas orienté introuvable')ModifierAccompagnementUseCase.ts:66—const err = new Error('Accompagnement introuvable')CreerCasOrienteUseCase.ts:60—const 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:157—throw 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.tscontient 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 fichiersindex.tsbarrel exclus) - Arrow functions dans
AuthModuleController.ts(34 méthodes) req.utilisateurutilisé (commentaire documenté dans le code)$transactionprésent dansUtilisateurRepositoryPrisma.ts:189,238(créerAvecCodeVerification, supprimerAvecSessions)- Toutes les exceptions de
AuthExceptions.tsétendentErreurMetier this.nameassigné dans toutes les classes d'exceptions AuthAuditLogRepositoryutilisé pour l'audit dans plusieurs use cases (DeconnexionUseCase, Verifier2FAUseCase, etc.)
⚠️ Warnings¶
- Règle 11 —
captureStackTraceabsent deAuthExceptions.ts(12 classes) etExpirationExceptions.ts(4 classes). La classe parenteErreurMetierl'appelle dans son constructeur, ce qui offre une protection partielle, mais le guide exige l'appel explicite dans CHAQUE constructeur enfant. - Naming —
authValidation.tsaurait dû être nomméServiceValidationAuth.ts(convention section 12) - Routes — Situées dans
shared/infrastructure/http/routes/au lieu deAuth/infrastructure/http/routes/(répertoire existe mais est vide). Déviation architecturale probablement intentionnelle pour l'accès public des routes d'authentification. - Fichiers parasites —
InscrireUtilisateur.ts(165 octets, re-export simple) etInscrireUtilisateur.ts.bakdansAuth/application/usecases/— à supprimer.
❌ Violations (règles absolues)¶
- RÈGLE 5 —
throw new Error()brut dans des use cases : VerifierNouvelEmailUseCase.ts:195—throw new Error('Échec de la mise à jour de l\'email')→ doit êtrethrow new ErreurChangerEmail(..., 'ERREUR_SERVEUR')-
ChangerMotDePasseUseCase.ts:159—throw new Error('Échec de la mise à jour du mot de passe')→ doit êtrethrow 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 êtrethis.logger.warn('Schéma auth inconnu', { nomSchema }) - Ligne 611 :
this.logger.info(`Pas de règles métier auth spécifiques pour: ${nomSchema}`)→ doit êtrethis.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 5 —
CreerEvaluationUseCase.ts:55—throw Object.assign(new Error("Enfant introuvable"), { code: 'ENFANT_INTROUVABLE' })— pattern non-typé → doit êtrethrow new ErreurEvaluation('Enfant introuvable', 'ENFANT_INTROUVABLE') -
SCHEMA_GAP critique —
EvaluationRepositoryPrisma.ts(etConfigCritereRepositoryPrisma.tsdans Referentiels) : les modèlesevaluationVulnerabiliteetconfigCriteresont absents du schéma Prisma. Toutes les méthodes du repository sont des stubs qui throwentnew 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)
$transactiondansFormationRepositoryPrisma.ts:218pourajouterParticipationAvecCompteur()- Deux fichiers de routes (
formations.module.routes.ts,sensibilisation.module.routes.ts) correctement déclarés - Deux ModuleControllers (
FormationsModuleController,SensibilisationModuleController)
⚠️ Warnings¶
SupportCommunicationRepositoryPrisma.ts:83—delete({ where: { id } })sansidUtilisateuraprès unfindFirst({ where: { id, idUtilisateur } }). Le pattern 2-étapes (vérifier puis supprimer) n'est pas atomique. UtiliserdeleteMany({ where: { id, idUtilisateur } })directement.- Mapper nommé
mapperVersDTO()au lieu demapper()(convention guide utilisemapper)
Module ImportExcel — CONFORME¶
✅ Points conformes¶
- Structure complète
$transactiondansImportExcelRepositoryPrisma.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) $transactionpour 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 lewheremais le guide exige.updateMany()pour ne pas lever d'exception si l'enregistrement n'appartient pas à l'utilisateurSessionConcertationRepositoryPrisma.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 filtreidUtilisateur. SiCadreConcertationest 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 — seulversObjetPlainPublic()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 demapper()dansIndicateurSuiviRepositoryPrisma.ts(convention guide utilisemapper) MesureIndicateurRepositoryPrisma.tsetEtudeDiagnostiqueRepositoryPrisma.ts: pas de privatemapper()détecté
❌ Violations (règles absolues)¶
- RÈGLE 5 —
SaisirMesureUseCase.ts:52—const err = new Error('Indicateur introuvable')puisthrow err→ doit êtrethrow 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éthodeprivate 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/deletesansidUtilisateurACCEPTABLE pour ces entités
⚠️ Warnings¶
PersonneRessourceRepositoryPrisma.ts:findUnique({ where: { id } })etdelete({ where: { id } })sansidUtilisateur— à 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 dethrow new ErreurReferentiels(): ObtenirProfilUtilisateurUseCase.ts:52ObtenirPersonneRessourceUseCase.ts:38ObtenirTypeAccompagnementUseCase.ts:52SupprimerPersonneRessourceUseCase.ts:38SupprimerCommuneUseCase.ts:52,57SupprimerTypeAccompagnementUseCase.ts:52,57ModifierPersonneRessourceUseCase.ts:51ModifierProfilUtilisateurUseCase.ts:54CreerTypeAccompagnementUseCase.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 critique —
ConfigCritereRepositoryPrisma.ts:37: le modèleconfigCritereest 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/mobilisationPilotage/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:83→deleteMany({ 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/versAuth/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)