1- import { MongooseModuleOptions } from '@nestjs/mongoose' ;
2- import { RedisOptions } from 'ioredis' ;
3- import { HelmetOptions } from 'helmet' ;
4- import { SwaggerCustomOptions } from '@nestjs/swagger' ;
5- import Joi from 'joi' ;
6- import { IAuthModuleOptions } from '@nestjs/passport' ;
7- import { JwtModuleOptions } from '@nestjs/jwt' ;
8- import { StorageManagerConfig } from '~/_common/factorydrive' ;
9- import { AmazonWebServicesS3StorageConfig } from '~/_common/factorydrive' ;
10- import { HttpModuleOptions } from '@nestjs/axios' ;
1+ import { MongooseModuleOptions } from '@nestjs/mongoose'
2+ import { RedisOptions } from 'ioredis'
3+ import { HelmetOptions } from 'helmet'
4+ import { SwaggerCustomOptions } from '@nestjs/swagger'
5+ import Joi from 'joi'
6+ import { IAuthModuleOptions } from '@nestjs/passport'
7+ import { JwtModuleOptions } from '@nestjs/jwt'
8+ import { StorageManagerConfig } from '~/_common/factorydrive'
9+ import { AmazonWebServicesS3StorageConfig } from '~/_common/factorydrive'
10+ import { HttpModuleOptions } from '@nestjs/axios'
1111
12+ /**
13+ * Schéma de validation Joi pour les variables d'environnement
14+ *
15+ * @description Définit et valide toutes les variables d'environnement requises et optionnelles
16+ * pour l'application. Fournit des valeurs par défaut et des règles de validation strictes.
17+ *
18+ * @example
19+ * // Utilisation avec ConfigModule
20+ * ConfigModule.forRoot({
21+ * validationSchema: validationSchema,
22+ * })
23+ */
1224export const validationSchema = Joi . object ( {
1325 LANG : Joi
1426 . string ( )
@@ -129,37 +141,53 @@ export const validationSchema = Joi.object({
129141 . default ( 'FR' ) ,
130142} ) ;
131143
144+ /**
145+ * Configuration d'un plugin Mongoose
146+ *
147+ * @interface MongoosePlugin
148+ * @property {string } package - Nom du package npm du plugin
149+ * @property {boolean } [enabled] - Indique si le plugin est activé (optionnel)
150+ * @property {Record<string, any> } [options] - Options de configuration du plugin (optionnel)
151+ */
132152export interface MongoosePlugin {
133153 package : string ;
134154 enabled ?: boolean ;
135155 options ?: Record < string , any > ; // eslint-disable-line @typescript-eslint/no-explicit-any
136156}
157+
158+ /**
159+ * Interface principale de configuration de l'application
160+ *
161+ * @interface ConfigInstance
162+ * @description Définit la structure complète de la configuration de l'application
163+ * incluant tous les modules et services (MongoDB, Redis, JWT, Mailer, etc.)
164+ */
137165export interface ConfigInstance {
138166 application : {
139167 lang : string
140- logLevel : string ;
141- nameQueue : string ;
168+ logLevel : string
169+ nameQueue : string
142170 bodyParser : {
143- limit : string ;
144- } ;
171+ limit : string
172+ }
145173 https : {
146174 enabled : boolean ;
147175 key : string ;
148176 cert : string ;
149177 }
150- } ;
151- helmet : HelmetOptions ;
178+ }
179+ helmet : HelmetOptions
152180 mongoose : {
153181 uri : string ;
154- options : MongooseModuleOptions ;
155- plugins : MongoosePlugin [ ] ;
182+ options : MongooseModuleOptions
183+ plugins : MongoosePlugin [ ]
156184 } ;
157185 ioredis : {
158- uri : string ;
159- options : RedisOptions ;
186+ uri : string
187+ options : RedisOptions
160188 } ;
161189 axios : {
162- options : HttpModuleOptions ;
190+ options : HttpModuleOptions
163191 } ;
164192 factorydrive : {
165193 options :
@@ -168,44 +196,61 @@ export interface ConfigInstance {
168196 disks : {
169197 [ key : string ] : {
170198 driver : 's3' ;
171- config : AmazonWebServicesS3StorageConfig ;
172- } ;
173- } ;
174- } ;
175- } ;
199+ config : AmazonWebServicesS3StorageConfig
200+ }
201+ }
202+ }
203+ }
176204 passport : {
177- options : IAuthModuleOptions ;
178- } ;
205+ options : IAuthModuleOptions
206+ }
179207 jwt : {
180- options : JwtModuleOptions ;
208+ options : JwtModuleOptions
181209 } ;
182210 mailer : {
183- host : string ;
184- port : number ;
185- sender : string ;
186- } ;
211+ host : string
212+ port : number
213+ sender : string
214+ }
187215 sms : {
188- host : string ;
189- systemId : string ;
190- password : string ;
191- sourceAddr : string ;
192- regionCode : string ;
193- } ;
216+ host : string
217+ systemId : string
218+ password : string
219+ sourceAddr : string
220+ regionCode : string
221+ }
194222 frontPwd : {
195- url : string ;
196- identityMailAttribute : string ;
197- identityMobileAttribute : string ;
198- } ;
223+ url : string
224+ identityMailAttribute : string
225+ identityMobileAttribute : string
226+ }
199227 lifecycle : {
200- triggerCronExpression : string ;
201- } ;
228+ triggerCronExpression : string
229+ }
202230 swagger : {
203- path : string ;
204- api : string ;
205- options : SwaggerCustomOptions ;
206- } ;
231+ path : string
232+ api : string
233+ options : SwaggerCustomOptions
234+ }
207235}
208236
237+ /**
238+ * Factory de configuration de l'application
239+ *
240+ * @function
241+ * @returns {ConfigInstance } Instance de configuration complète avec toutes les valeurs
242+ * @description Fonction factory qui génère la configuration de l'application en lisant
243+ * les variables d'environnement et en appliquant les valeurs par défaut.
244+ * Cette fonction est utilisée par NestJS ConfigModule pour initialiser la configuration.
245+ *
246+ * @example
247+ * // Dans app.module.ts
248+ * ConfigModule.forRoot({
249+ * isGlobal: true,
250+ * load: [config],
251+ * validationSchema: validationSchema,
252+ * })
253+ */
209254export default ( ) : ConfigInstance => ( {
210255 application : {
211256 lang : process . env [ 'LANG' ] || 'en' ,
@@ -318,4 +363,4 @@ export default (): ConfigInstance => ({
318363 sourceAddr : process . env [ 'SESAME_SMPP_SOURCEADDR' ] || '' ,
319364 regionCode : process . env [ 'SESAME_SMPP_REGIONCODE' ] || 'FR' ,
320365 } ,
321- } ) ;
366+ } )
0 commit comments