import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { ThrottlerModule } from '@nestjs/throttler'; import { APP_GUARD } from '@nestjs/core'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { appConfig, databaseConfig, redisConfig, jwtConfig, agentConfig } from './config'; import { SupabaseModule } from './database'; import { RedisModule } from './redis'; import { AuthModule } from './modules/auth/auth.module'; import { UsersModule } from './modules/users/users.module'; import { SpacesModule } from './modules/spaces/spaces.module'; import { RoomsModule } from './modules/rooms/rooms.module'; import { MembersModule } from './modules/members/members.module'; import { MessagesModule } from './modules/messages/messages.module'; import { DMsModule } from './modules/dms/dms.module'; import { NotificationsModule } from './modules/notifications/notifications.module'; import { FilesModule } from './modules/files/files.module'; import { SearchModule } from './modules/search/search.module'; import { AgentModule } from './modules/agent/agent.module'; import { ChatGatewayModule } from './gateways/chat.gateway.module'; import { JwtAuthGuard } from './common/guards/jwt-auth.guard'; @Module({ imports: [ // Configuration ConfigModule.forRoot({ isGlobal: true, load: [appConfig, databaseConfig, redisConfig, jwtConfig, agentConfig], envFilePath: ['.env.local', '.env'], }), // Event Emitter EventEmitterModule.forRoot(), // Rate Limiting ThrottlerModule.forRoot([ { name: 'short', ttl: 1000, limit: 10, }, { name: 'medium', ttl: 10000, limit: 30, }, { name: 'long', ttl: 60000, limit: 100, }, ]), // Database & Cache SupabaseModule, RedisModule, // Feature Modules - Phase 2 & 3 Complete AuthModule, UsersModule, SpacesModule, RoomsModule, MembersModule, MessagesModule, DMsModule, NotificationsModule, FilesModule, SearchModule, // Phase 4 - WebSocket & Real-time ChatGatewayModule, // Agent/Bot Messaging API AgentModule, ], controllers: [AppController], providers: [ AppService, // Global JWT Guard { provide: APP_GUARD, useClass: JwtAuthGuard, }, ], }) export class AppModule {}