import { Module, MiddlewareConsumer, NestModule } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { createOracleConfig } from './core/configs/typeorm.oracle.config'; import { createPostgresConfig } from './core/configs/typeorm.postgres.config'; import { LogisticModule } from './logistic/logistic.module'; import { OrdersPaymentModule } from './orders-payment/orders-payment.module'; import { AuthModule } from './auth/auth/auth.module'; import { DataConsultModule } from './data-consult/data-consult.module'; import { OrdersModule } from './orders/modules/orders.module'; import { OcorrencesController } from './crm/occurrences/ocorrences.controller'; import { OccurrencesModule } from './crm/occurrences/occurrences.module'; import { ReasonTableModule } from './crm/reason-table/reason-table.module'; import { NegotiationsModule } from './crm/negotiations/negotiations.module'; import { HttpModule } from '@nestjs/axios'; import { LogisticController } from './logistic/logistic.controller'; import { LogisticService } from './logistic/logistic.service'; import { LoggerModule } from './Log/logger.module'; import jwtConfig from './auth/jwt.config'; import { UsersModule } from './auth/users/users.module'; import { ProductsModule } from './products/products.module'; import { ThrottlerModule, ThrottlerModuleOptions } from '@nestjs/throttler'; import { RateLimiterMiddleware } from './common/middlewares/rate-limiter.middleware'; import { RequestSanitizerMiddleware } from './common/middlewares/request-sanitizer.middleware'; import { HealthModule } from './health/health.module'; @Module({ imports: [ UsersModule, ConfigModule.forRoot({ isGlobal: true, load: [jwtConfig] }), TypeOrmModule.forRootAsync({ name: 'oracle', inject: [ConfigService], useFactory: createOracleConfig, }), TypeOrmModule.forRootAsync({ name: 'postgres', inject: [ConfigService], useFactory: createPostgresConfig, }), ThrottlerModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService): ThrottlerModuleOptions => ({ throttlers: [ { ttl: config.get('THROTTLE_TTL', 60), limit: config.get('THROTTLE_LIMIT', 10), }, ], }), }), LogisticModule, OrdersPaymentModule, HttpModule, OrdersModule, ProductsModule, NegotiationsModule, OccurrencesModule, ReasonTableModule, LoggerModule, DataConsultModule, AuthModule, OrdersModule, HealthModule, ], controllers: [OcorrencesController, LogisticController ], providers: [ LogisticService, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(RequestSanitizerMiddleware) .forRoutes('*'); consumer .apply(RateLimiterMiddleware) .forRoutes('auth', 'users'); } }