Skip to content

Commit f5007ab

Browse files
committed
feat: Add detailed JSDoc comments to seedRequestContextId and Sentry initialization for improved documentation
1 parent 4888993 commit f5007ab

File tree

2 files changed

+67
-8
lines changed

2 files changed

+67
-8
lines changed

apps/api/src/contextId.ts

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1-
import { INestApplicationContext } from '@nestjs/common';
2-
import { ModuleRef } from '@nestjs/core/injector/module-ref';
3-
import { ContextIdFactory } from '@nestjs/core';
1+
import { INestApplicationContext } from '@nestjs/common'
2+
import { ModuleRef } from '@nestjs/core/injector/module-ref'
3+
import { ContextIdFactory } from '@nestjs/core'
44

5-
// eslint-disable-next-line
5+
/**
6+
* Crée un contexte de requête avec un ID utilisateur par défaut
7+
*
8+
* @template T - Type de l'objet requête, doit contenir une propriété user optionnelle
9+
* @param {INestApplicationContext | ModuleRef} app - Instance de l'application NestJS ou référence de module
10+
* @param {T} [req] - Objet requête optionnel contenant les informations utilisateur
11+
* @returns {ContextId} Identifiant de contexte créé pour la requête
12+
*
13+
* @description Crée un contexte de requête avec un utilisateur par défaut ayant l'ID '000000000000000000000000'.
14+
* Utile pour les opérations de seed, les tâches planifiées ou les jobs en arrière-plan qui nécessitent
15+
* un contexte utilisateur sans provenir d'une requête HTTP réelle.
16+
*
17+
* @example
18+
* // Utilisation dans un job ou une tâche planifiée
19+
* const contextId = seedRequestContextId(this.moduleRef);
20+
* const service = await this.moduleRef.resolve(MyService, contextId);
21+
*
22+
* @example
23+
* // Avec des informations utilisateur personnalisées
24+
* const contextId = seedRequestContextId(app, {
25+
* user: { _id: '507f1f77bcf86cd799439011', role: 'admin' }
26+
* });
27+
*/
628
export const seedRequestContextId = <T extends { user?: any }>(app: INestApplicationContext | ModuleRef, req?: T) => {
7-
const contextId = ContextIdFactory.create();
29+
const contextId = ContextIdFactory.create()
830
app.registerRequestByContextId(
931
{
1032
...req,
@@ -15,5 +37,5 @@ export const seedRequestContextId = <T extends { user?: any }>(app: INestApplica
1537
},
1638
contextId,
1739
);
18-
return contextId;
19-
};
40+
return contextId
41+
}

apps/api/src/instrument.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,71 @@ import { Logger } from '@nestjs/common'
22
import * as Sentry from '@sentry/nestjs'
33
import { nodeProfilingIntegration } from '@sentry/profiling-node'
44

5+
/**
6+
* Initialisation conditionnelle de Sentry
7+
*
8+
* @description Vérifie la présence du DSN Sentry dans les variables d'environnement
9+
* et initialise Sentry avec les configurations suivantes :
10+
* - Taux d'échantillonnage des traces : 10%
11+
* - Taux d'échantillonnage des profils : 10%
12+
* - Capture des informations personnelles (PII)
13+
* - Intégrations : Mongoose, Console, HTTP, Express, NestJS, Redis, FS
14+
* - Profiling Node.js activé
15+
*
16+
* Si SESAME_SENTRY_DSN n'est pas défini, Sentry reste désactivé et un avertissement est émis.
17+
*/
518
if (!process.env.SESAME_SENTRY_DSN) {
619
Logger.warn('SENTRY DSN not provided, Sentry is disabled', 'SentryInit')
720
} else {
821
Sentry.init({
22+
/** DSN de connexion à Sentry */
923
dsn: process.env.SESAME_SENTRY_DSN!,
24+
/** Version de release au format nom@version */
1025
release: process.env.npm_package_name + '@' + process.env.npm_package_version,
26+
/** Mode debug désactivé en production */
1127
debug: false,
1228

29+
/** Envoi des données personnellement identifiables */
1330
sendDefaultPii: true,
31+
/** Taux d'échantillonnage pour les traces (10%) */
1432
tracesSampleRate: 0.1,
33+
/** Taux d'échantillonnage pour les profils (10%) */
1534
profilesSampleRate: 0.1,
35+
/** Inclusion des variables locales dans les rapports d'erreur */
1636
includeLocalVariables: true,
37+
/** Taux d'échantillonnage pour les sessions de profil (10%) */
1738
profileSessionSampleRate: 0.1,
39+
/** Cycle de vie du profiling basé sur les traces */
1840
profileLifecycle: 'trace',
41+
/** Profondeur de normalisation des objets */
1942
normalizeDepth: 10,
43+
/** Attachement des stack traces aux événements */
2044
attachStacktrace: true,
2145

46+
/** Activation de la capture des logs */
2247
enableLogs: true,
2348

49+
/**
50+
* Intégrations Sentry activées
51+
* @description Liste des intégrations pour capturer différents types d'événements
52+
* et erreurs provenant de diverses sources (Mongoose, HTTP, Redis, etc.)
53+
*/
2454
integrations: [
55+
/** Profiling Node.js pour analyse des performances */
2556
nodeProfilingIntegration(),
26-
57+
/** Intégration Mongoose pour les erreurs de base de données */
2758
Sentry.mongooseIntegration(),
59+
/** Intégration Console pour capturer console.error/warn */
2860
Sentry.consoleIntegration(),
61+
/** Intégration HTTP pour tracer les requêtes sortantes */
2962
Sentry.httpIntegration(),
63+
/** Intégration Express pour les requêtes entrantes */
3064
Sentry.expressIntegration(),
65+
/** Intégration NestJS pour le framework */
3166
Sentry.nestIntegration(),
67+
/** Intégration Redis pour les opérations de cache */
3268
Sentry.redisIntegration(),
69+
/** Intégration FS pour les opérations système de fichiers */
3370
Sentry.fsIntegration(),
3471
],
3572
})

0 commit comments

Comments
 (0)