ceo-api/src/app.module.ts

79 lines
3 KiB
TypeScript

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