import { Module, Scope } from '@nestjs/common'; import { RefreshTokenInterceptor, SessionModule } from './core/sessions'; import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; import { HttpExceptionFilter, TransformInterceptor } from './core/response'; import { ApmModule } from './core/apm'; import { CONNECTION_NAME } from './core/strings/constants/base.constants'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigModule } from '@nestjs/config'; import { UserPrivilegeModule } from './modules/user-related/user-privilege/user-privilege.module'; import { CqrsModule } from '@nestjs/cqrs'; import { CouchModule } from './modules/configuration/couch/couch.module'; import { UserPrivilegeModels } from './modules/user-related/user-privilege/constants'; import { RolesGuard } from './core/guards/domain/roles.guard'; import { PrivilegeService } from './core/guards/domain/services/privilege.service'; import { UserModel } from './modules/user-related/user/data/models/user.model'; import { AuthModule } from './modules/configuration/auth/auth.module'; import { UserModule } from './modules/user-related/user/user.module'; import { LogModel } from './modules/configuration/log/data/models/log.model'; import { ErrorLogModel } from './modules/configuration/log/data/models/error-log.model'; import { LogModule } from './modules/configuration/log/log.module'; @Module({ imports: [ ApmModule.register(), ConfigModule.forRoot({ isGlobal: true, }), TypeOrmModule.forRoot({ name: CONNECTION_NAME.DEFAULT, type: 'postgres', host: process.env.DEFAULT_DB_HOST, port: parseInt(process.env.DEFAULT_DB_PORT), username: process.env.DEFAULT_DB_USER, password: process.env.DEFAULT_DB_PASS, database: process.env.DEFAULT_DB_NAME, entities: [ ...UserPrivilegeModels, UserModel, LogModel, ErrorLogModel, ], synchronize: false, }), CqrsModule, SessionModule, AuthModule, CouchModule, LogModule, UserModule, UserPrivilegeModule, ], controllers: [], providers: [ PrivilegeService, /** * By default all request from client will protect by JWT * if there is some endpoint/function that does'nt require authentication * please add `@Unprotected()` decorator to the function */ { provide: APP_GUARD, scope: Scope.REQUEST, useClass: RolesGuard, }, { provide: APP_INTERCEPTOR, scope: Scope.REQUEST, useClass: RefreshTokenInterceptor, }, { provide: APP_INTERCEPTOR, scope: Scope.REQUEST, useClass: TransformInterceptor, }, { provide: APP_FILTER, scope: Scope.REQUEST, useClass: HttpExceptionFilter, }, ], }) export class AppModule {}