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 { AuthModule } from './auth/auth/auth.module'; import { DataConsultModule } from './data-consult/data-consult.module'; import { OrdersModule } from './orders/modules/orders.module'; import { HttpModule } from '@nestjs/axios'; import { DebModule } from './orders/modules/deb.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 { clientes } from './data-consult/clientes.module'; import { PartnersModule } from './partners/partners.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, HttpModule, OrdersModule, clientes, ProductsModule, DataConsultModule, AuthModule, DebModule, PartnersModule, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(RequestSanitizerMiddleware).forRoutes('*'); consumer.apply(RateLimiterMiddleware).forRoutes('auth', 'users'); } }