Skip to content

Commit 4888993

Browse files
committed
feat: Add detailed JSDoc comments to configuration schema and interfaces for improved documentation
1 parent 153f6a0 commit 4888993

File tree

1 file changed

+95
-50
lines changed

1 file changed

+95
-50
lines changed

apps/api/src/config.ts

Lines changed: 95 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
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+
*/
1224
export 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+
*/
132152
export 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+
*/
137165
export 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+
*/
209254
export 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

Comments
 (0)