Files
textbee/api/src/app.module.ts
2026-03-23 13:54:52 +03:00

78 lines
2.1 KiB
TypeScript

import {
MiddlewareConsumer,
Module,
NestModule,
RequestMethod,
} from '@nestjs/common'
import { MongooseModule } from '@nestjs/mongoose'
import { GatewayModule } from './gateway/gateway.module'
import { AuthModule } from './auth/auth.module'
import { UsersModule } from './users/users.module'
import { ThrottlerModule } from '@nestjs/throttler'
import { APP_GUARD } from '@nestjs/core/constants'
import { WebhookModule } from './webhook/webhook.module'
import { ThrottlerByIpGuard } from './auth/guards/throttle-by-ip.guard'
import { Injectable, NestMiddleware } from '@nestjs/common'
import { Request, Response, NextFunction } from 'express'
import { ScheduleModule } from '@nestjs/schedule'
import { BillingModule } from './billing/billing.module'
import { ConfigModule, ConfigService } from '@nestjs/config'
import { BullModule } from '@nestjs/bull'
import { SupportModule } from './support/support.module'
import { EventEmitterModule } from '@nestjs/event-emitter'
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
if (next) {
next()
}
}
}
@Module({
imports: [
MongooseModule.forRoot(process.env.MONGO_URI),
ConfigModule.forRoot({
isGlobal: true,
}),
EventEmitterModule.forRoot(),
ThrottlerModule.forRoot([
{
ttl: 60000,
limit: 500,
},
]),
ScheduleModule.forRoot(),
BullModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
return {
redis: configService.get('REDIS_URL'),
}
},
}),
AuthModule,
UsersModule,
GatewayModule,
WebhookModule,
BillingModule,
SupportModule,
],
controllers: [],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerByIpGuard,
},
],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes({ path: '*', method: RequestMethod.ALL })
}
}