import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { APP_FILTER, APP_INTERCEPTOR } from '@nestjs/core'; import { TypeOrmModule } from '@nestjs/typeorm'; import { configModuleOptions } from './configs/module-options'; import { AllExceptionsFilter } from './filters/all-exceptions.filter'; import { LoggingInterceptor } from './interceptors/logging.interceptor'; import { AppLoggerModule } from './logger/logger.module'; @Module({ imports: [ ConfigModule.forRoot(configModuleOptions), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ type: 'postgres', host: configService.get('database.host'), port: configService.get('database.port'), database: configService.get('database.name'), username: configService.get('database.user'), password: configService.get('database.pass'), entities: [__dirname + '/../**/*.entity{.ts,.js}'], // Timezone configured on the MySQL server. // This is used to typecast server date/time values to JavaScript Date object and vice versa. timezone: 'Z', synchronize: false, debug: configService.get('env') === 'development', }), }), AppLoggerModule, ], exports: [AppLoggerModule, ConfigModule], providers: [ { provide: APP_INTERCEPTOR, useClass: LoggingInterceptor }, { provide: APP_FILTER, useClass: AllExceptionsFilter, }, ], }) export class SharedModule {}