File size: 2,578 Bytes
639bb77
 
b8979b5
639bb77
 
 
 
ffda0ec
639bb77
 
 
 
 
 
 
 
 
 
 
 
ffda0ec
5be4180
639bb77
 
 
 
 
 
 
 
ffda0ec
639bb77
 
 
b8979b5
 
 
639bb77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5be4180
639bb77
 
 
ffda0ec
 
 
639bb77
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 { TaModule } from './modules/ta/ta.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,
    TaModule,

    // 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 {}