import { Module } from '@nestjs/common'; import { APP_GUARD } from '@nestjs/core'; import { ConfigModule } from '@nestjs/config'; import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler'; import { ScheduleModule } from '@nestjs/schedule'; import { BullModule } from '@nestjs/bullmq'; import { LoggerModule } from 'nestjs-pino'; import { HealthController } from './health/health.controller'; import { AuthModule } from './auth/auth.module'; import { EventsModule } from './events/events.module'; import { AgentNichesModule } from './agent-niches/agent-niches.module'; import { AuditModule } from './audit/audit.module'; import { OrganizationsModule } from './organizations/organizations.module'; import { TasksModule } from './tasks/tasks.module'; import { GoalsModule } from './goals/goals.module'; import { DecisionsModule } from './decisions/decisions.module'; import { TransactionsModule } from './transactions/transactions.module'; import { ObservationsModule } from './observations/observations.module'; import { OpportunitiesModule } from './opportunities/opportunities.module'; import { TenantsModule } from './tenants/tenants.module'; import { NavigationModule } from './navigation/navigation.module'; import { ProjectionsModule } from './projections/projections.module'; import { NotificationsModule } from './notifications/notifications.module'; import { SagasModule } from './sagas/sagas.module'; import { IntelligenceModule } from './intelligence/intelligence.module'; import { SegmentsModule } from './segments/segments.module'; import { ResearchBriefsModule } from './research-briefs/research-briefs.module'; import { BriefingModule } from './briefing/briefing.module'; import { SessionGuard } from './auth/session.guard'; import { TenantGuard } from './auth/tenant.guard'; function parseRedisConnection(redisUrl: string | undefined) { if (!redisUrl) { return { host: 'localhost', port: 6379 }; } const url = new URL(redisUrl); return { host: url.hostname, port: Number(url.port || 6379), password: url.password || undefined, }; } @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), LoggerModule.forRoot(), ThrottlerModule.forRoot([{ ttl: 60000, limit: 100 }]), ScheduleModule.forRoot(), BullModule.forRoot({ connection: parseRedisConnection(process.env.REDIS_URL) }), AuthModule, AuditModule, EventsModule, AgentNichesModule, TenantsModule, NavigationModule, ProjectionsModule, NotificationsModule, SagasModule, OrganizationsModule, TasksModule, GoalsModule, DecisionsModule, TransactionsModule, ObservationsModule, OpportunitiesModule, IntelligenceModule, SegmentsModule, ResearchBriefsModule, BriefingModule, ], controllers: [HealthController], providers: [ { provide: APP_GUARD, useClass: ThrottlerGuard }, { provide: APP_GUARD, useClass: SessionGuard }, { provide: APP_GUARD, useClass: TenantGuard }, ], }) export class AppModule {}