pos-be/src/app.module.ts

109 lines
3.9 KiB
TypeScript

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';
import { TenantModule } from './modules/user-related/tenant/tenant.module';
import { ItemCategoryModule } from './modules/item-related/item-category/item-category.module';
import { ItemCategoryModel } from './modules/item-related/item-category/data/models/item-category.model';
import { ConstantModule } from './modules/configuration/constant/constant.module';
import { VipCategoryModule } from './modules/transaction/vip-category/vip-category.module';
import { VipCategoryModel } from './modules/transaction/vip-category/data/models/vip-category.model';
import { VipCodeModule } from './modules/transaction/vip-code/vip-code.module';
import { VipCodeModel } from './modules/transaction/vip-code/data/models/vip-code.model';
import { ItemModule } from './modules/item-related/item/item.module';
import { ItemModel } from './modules/item-related/item/data/models/item.model';
@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,
ItemModel,
ItemCategoryModel,
VipCategoryModel,
VipCodeModel,
],
synchronize: false,
}),
ConstantModule,
CqrsModule,
SessionModule,
AuthModule,
CouchModule,
LogModule,
// user
TenantModule,
UserModule,
UserPrivilegeModule,
// Item
ItemCategoryModule,
ItemModule,
// transaction
VipCategoryModule,
VipCodeModule,
],
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 {}