forked from brocoders/nestjs-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.module.ts
102 lines (100 loc) · 3.49 KB
/
app.module.ts
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
import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';
import { FilesModule } from './files/files.module';
import { AuthModule } from './auth/auth.module';
import databaseConfig from './database/config/database.config';
import authConfig from './auth/config/auth.config';
import appConfig from './config/app.config';
import mailConfig from './mail/config/mail.config';
import fileConfig from './files/config/file.config';
import facebookConfig from './auth-facebook/config/facebook.config';
import googleConfig from './auth-google/config/google.config';
import twitterConfig from './auth-twitter/config/twitter.config';
import appleConfig from './auth-apple/config/apple.config';
import path from 'path';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthAppleModule } from './auth-apple/auth-apple.module';
import { AuthFacebookModule } from './auth-facebook/auth-facebook.module';
import { AuthGoogleModule } from './auth-google/auth-google.module';
import { AuthTwitterModule } from './auth-twitter/auth-twitter.module';
import { I18nModule } from 'nestjs-i18n/dist/i18n.module';
import { HeaderResolver } from 'nestjs-i18n';
import { TypeOrmConfigService } from './database/typeorm-config.service';
import { MailModule } from './mail/mail.module';
import { HomeModule } from './home/home.module';
import { DataSource, DataSourceOptions } from 'typeorm';
import { AllConfigType } from './config/config.type';
import { SessionModule } from './session/session.module';
import { MailerModule } from './mailer/mailer.module';
import { MongooseModule } from '@nestjs/mongoose';
import { MongooseConfigService } from './database/mongoose-config.service';
import { DatabaseConfig } from './database/config/database-config.type';
// <database-block>
const infrastructureDatabaseModule = (databaseConfig() as DatabaseConfig)
.isDocumentDatabase
? MongooseModule.forRootAsync({
useClass: MongooseConfigService,
})
: TypeOrmModule.forRootAsync({
useClass: TypeOrmConfigService,
dataSourceFactory: async (options: DataSourceOptions) => {
return new DataSource(options).initialize();
},
});
// </database-block>
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [
databaseConfig,
authConfig,
appConfig,
mailConfig,
fileConfig,
facebookConfig,
googleConfig,
twitterConfig,
appleConfig,
],
envFilePath: ['.env'],
}),
infrastructureDatabaseModule,
I18nModule.forRootAsync({
useFactory: (configService: ConfigService<AllConfigType>) => ({
fallbackLanguage: configService.getOrThrow('app.fallbackLanguage', {
infer: true,
}),
loaderOptions: { path: path.join(__dirname, '/i18n/'), watch: true },
}),
resolvers: [
{
use: HeaderResolver,
useFactory: (configService: ConfigService<AllConfigType>) => {
return [
configService.get('app.headerLanguage', {
infer: true,
}),
];
},
inject: [ConfigService],
},
],
imports: [ConfigModule],
inject: [ConfigService],
}),
UsersModule,
FilesModule,
AuthModule,
AuthFacebookModule,
AuthGoogleModule,
AuthTwitterModule,
AuthAppleModule,
SessionModule,
MailModule,
MailerModule,
HomeModule,
],
})
export class AppModule {}