import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core'; import { JwtModule } from '@nestjs/jwt'; import { PrismaModule } from './infrastructure/database/prisma.module'; import { RedisModule } from './infrastructure/redis/redis.module'; import { QueueModule } from './infrastructure/queue/queue.module'; import { AiModule } from './modules/ai/ai.module'; import { StorageModule } from './infrastructure/storage/storage.module'; import { LoggerModule } from './infrastructure/logger/logger.module'; import { SystemModule } from './modules/system/system.module'; import { AuthModule } from './modules/auth/auth.module'; import { AdminAuthModule } from './modules/admin-auth/admin-auth.module'; import { AdminDashboardModule } from './modules/admin-dashboard/admin-dashboard.module'; import { AdminUsersModule } from './modules/admin-users/admin-users.module'; import { AdminBillingModule } from './modules/admin-billing/admin-billing.module'; import { AdminServersModule } from './modules/admin-servers/admin-servers.module'; import { AdminConversationModule } from './modules/admin-conversation/admin-conversation.module'; import { AdminAiChatModule } from './modules/admin-ai-chat/admin-ai-chat.module'; import { AdminAuditLogModule } from './modules/admin-audit-log/admin-audit-log.module'; import { UsersModule } from './modules/users/users.module'; import { KnowledgeBaseModule } from './modules/knowledge-base/knowledge-base.module'; import { KnowledgeItemsModule } from './modules/knowledge-items/knowledge-items.module'; import { DocumentImportModule } from './modules/document-import/document-import.module'; import { LearningSessionModule } from './modules/learning-session/learning-session.module'; import { ActiveRecallModule } from './modules/active-recall/active-recall.module'; import { AiAnalysisModule } from './modules/ai-analysis/ai-analysis.module'; import { ReviewModule } from './modules/review/review.module'; import { FocusItemsModule } from './modules/focus-items/focus-items.module'; import { LearningActivityModule } from './modules/learning-activity/learning-activity.module'; import { NotificationsModule } from './modules/notifications/notifications.module'; import { FeedbackModule } from './modules/feedback/feedback.module'; import { FilesModule } from './modules/files/files.module'; import { WaitlistModule } from './modules/waitlist/waitlist.module'; import { KnowledgeSourceModule } from './modules/knowledge-source/knowledge-source.module'; import { ImportCandidateModule } from './modules/import-candidate/import-candidate.module'; import { RagModule } from './modules/rag/rag.module'; import { JwtAuthGuard } from './common/guards/jwt-auth.guard'; import { RolesGuard } from './common/guards/roles.guard'; import { RateLimitGuard } from './common/guards/rate-limit.guard'; import { GlobalExceptionFilter } from './common/filters/global-exception.filter'; import { StrictValidationPipe } from './common/pipes/strict-validation.pipe'; import { ResponseInterceptor } from './common/interceptors/response.interceptor'; import { AiAnalysisWorker } from './workers/ai-analysis.worker'; import { DocumentImportWorker } from './workers/document-import.worker'; import { NotificationWorker } from './workers/notification.worker'; import appConfig from './config/app.config'; import databaseConfig from './config/database.config'; import redisConfig from './config/redis.config'; import jwtConfig from './config/jwt.config'; import aiConfig from './config/ai.config'; import storageConfig from './config/storage.config'; import appleConfig from './config/apple.config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [ appConfig, databaseConfig, redisConfig, jwtConfig, aiConfig, storageConfig, appleConfig, ], }), JwtModule.registerAsync({ global: true, imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ secret: config.get('jwt.secret'), signOptions: { expiresIn: config.get('jwt.expiresIn', '1h') as any }, }), }), PrismaModule, RedisModule, QueueModule, AiModule, StorageModule, LoggerModule, SystemModule, AuthModule, AdminAuthModule, AdminDashboardModule, AdminUsersModule, AdminBillingModule, AdminServersModule, AdminConversationModule, AdminAiChatModule, AdminAuditLogModule, UsersModule, KnowledgeBaseModule, KnowledgeItemsModule, KnowledgeSourceModule, ImportCandidateModule, DocumentImportModule, RagModule, LearningSessionModule, ActiveRecallModule, AiAnalysisModule, ReviewModule, FocusItemsModule, LearningActivityModule, NotificationsModule, FeedbackModule, FilesModule, WaitlistModule, ], providers: [ { provide: APP_GUARD, useClass: RateLimitGuard }, { provide: APP_GUARD, useClass: JwtAuthGuard }, { provide: APP_GUARD, useClass: RolesGuard }, { provide: APP_FILTER, useClass: GlobalExceptionFilter }, { provide: APP_PIPE, useClass: StrictValidationPipe }, { provide: APP_INTERCEPTOR, useClass: ResponseInterceptor }, AiAnalysisWorker, DocumentImportWorker, NotificationWorker, ], }) export class AppModule {}