-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathapp.module.ts
More file actions
125 lines (121 loc) · 4.64 KB
/
app.module.ts
File metadata and controls
125 lines (121 loc) · 4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import { Module, OnModuleInit } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './config/typeorm.config';
import { LoggerModule, PinoLogger } from 'nestjs-pino';
import { loggerConfig } from './config/logger.config';
import { GuildsModule } from './guilds/guilds.module';
import { CampusesModule } from './campuses/campuses.module';
import { GuildsTemplatesModule } from './guilds-templates/guilds-templates.module';
import { ResourcesModule } from './resources/resources.module';
import { ReportsModule } from './reports/reports.module';
import { ModeratorActionsModule } from './moderator-actions/moderator-actions.module';
import { MembersInformationsModule } from './members-informations/members-informations.module';
import { CategoriesModule } from './categories/categories.module';
import { AnswersModule } from './answers/answers.module';
import { RolesModule } from './roles/roles.module';
import { MembersModule } from './members/members.module';
import { XpTransactionsModule } from './xp-transactions/xp-transactions.module';
import { QuestionsModule } from './questions/questions.module';
import { PromotionsModule } from './promotions/promotions.module';
import { ChannelsModule } from './channels/channels.module';
import { IdentificationRequestsModule } from './identification-requests/identification-requests.module';
import { DashboardAccountModule } from './dashboard-accounts/dashboard-accounts.module';
import { VotesModule } from './votes/votes.module';
import { CommentsModule } from './comments/comments.module';
import { DiscordUsersModule } from './discord-users/discord-users.module';
import { CoursesModule } from './courses/courses.module';
import { TagsModule } from './tags/tags.module';
import { PollsModule } from './polls/polls.module';
import { ConfigModule } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
import { AppController } from './app.controller';
import { SignatureModule } from './signature/signature.module';
import { PollTemplatesModule } from './poll-templates/poll-templates.module';
import { QuestionTemplatesModule } from './question-templates/question-templates.module';
import { AnswerTemplatesModule } from './answer-templates/answer-templates.module';
// IMPORTS POUR LA SÉCURITÉ GLOBALE
import { APP_GUARD } from '@nestjs/core';
import { GlobalAuthGuard } from './auth/guards/global-auth.guard';
import { ThrottlerModule } from '@nestjs/throttler';
/**
* Module principal de l'application
*
* Ce module importe et configure :
* - La connexion à la base de données via TypeORM
* - Le système de logging via Pino
* - Les modules fonctionnels de l'application
*/
@Module({
imports: [
TypeOrmModule.forRoot(typeOrmConfig), // Connexion à la base de données réactivée
LoggerModule.forRoot(loggerConfig),
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.env.${process.env.NODE_ENV || 'development'}`,
}),
AuthModule,
GuildsModule,
CampusesModule,
GuildsTemplatesModule,
ResourcesModule,
ModeratorActionsModule,
MembersInformationsModule,
CategoriesModule,
AnswersModule,
RolesModule,
MembersModule,
XpTransactionsModule,
QuestionsModule,
PromotionsModule,
ChannelsModule,
DashboardAccountModule,
IdentificationRequestsModule,
VotesModule,
ReportsModule,
CommentsModule,
DiscordUsersModule,
CommentsModule,
ReportsModule,
CoursesModule,
CommentsModule,
TagsModule,
PollsModule,
SignatureModule,
PollTemplatesModule,
QuestionTemplatesModule,
AnswerTemplatesModule,
ThrottlerModule.forRoot([{
ttl: 1, // 1 seconde
limit: 50, // 50 requêtes par seconde
}]),
],
controllers: [AppController],
// CONFIGURATION DU GUARD GLOBAL
providers: [
{
// APP_GUARD = token spécial de NestJS pour les guards globaux
provide: APP_GUARD,
// Notre GlobalAuthGuard sera appliqué à TOUTES les routes
useClass: GlobalAuthGuard,
/*
* CE QUI SE PASSE MAINTENANT :
* 1. Chaque requête HTTP sera interceptée par GlobalAuthGuard
* 2. Le guard vérifiera si la route a @Public()
* 3. Si @Public() alors accès autorisé
* 4. Si PAS @Public() alors vérification JWT obligatoire
*
* RÉSULTAT :
* - Sécurité par défaut sur 100% de l'API
* - Impossible d'oublier de protéger une route
*/
},
],
})
export class AppModule implements OnModuleInit {
constructor(private readonly logger: PinoLogger) {
this.logger.setContext('AppModule');
}
onModuleInit() {
this.logger.info('Application started 🚀');
}
}