import { MikroOrmModule } from "@mikro-orm/nestjs"; import { HttpModule } from "@nestjs/axios"; import { BullModule } from "@nestjs/bullmq"; import { CacheModule } from "@nestjs/cache-manager"; import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common"; import { ConfigModule } from "@nestjs/config"; import { JwtModule } from "@nestjs/jwt"; import { ThrottlerModule } from "@nestjs/throttler"; import { bullMqConfig } from "./configs/bullmq.config"; import { cacheConfig } from "./configs/cache.config"; import { httpConfig } from "./configs/http.config"; import { jwtConfig } from "./configs/jwt.config"; import { databaseConfig } from "./configs/mikro-orm.config"; import { rateLimitConfig } from "./configs/rateLimit.config"; import { HTTPLogger } from "./core/middlewares/logger.middleware"; import { AiAssistantModule } from "./modules/ai-assistant/ai-assistant.module"; import { AuthModule } from "./modules/auth/auth.module"; import { DomainsModule } from "./modules/domains/domains.module"; import { EmailModule } from "./modules/email/email.module"; import { MailServerModule } from "./modules/mail-server/mail-server.module"; import { MailboxModule } from "./modules/mailbox/mailbox.module"; import { NotificationModule } from "./modules/notifications/notifications.module"; import { QuotaSyncModule } from "./modules/quota-sync/quota-sync.module"; import { SettingModule } from "./modules/settings/settings.module"; import { EmailSignaturesModule } from "./modules/signatures/email-signatures.module"; import { TemplatesModule } from "./modules/templates/templates.module"; import { UploaderModule } from "./modules/uploader/uploader.module"; import { UsersModule } from "./modules/users/users.module"; import { UtilsModule } from "./modules/utils/utils.module"; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, cache: true }), JwtModule.registerAsync(jwtConfig()), BullModule.forRootAsync(bullMqConfig()), CacheModule.registerAsync(cacheConfig()), HttpModule.registerAsync(httpConfig()), ThrottlerModule.forRootAsync(rateLimitConfig()), MikroOrmModule.forRootAsync(databaseConfig), UtilsModule, AiAssistantModule, AuthModule, UsersModule, DomainsModule, EmailModule, MailboxModule, MailServerModule, QuotaSyncModule, EmailSignaturesModule, TemplatesModule, SettingModule, NotificationModule, UploaderModule, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(HTTPLogger).forRoutes("*"); } }