import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { APP_FILTER, 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 './infrastructure/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 { 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 { WaitlistModule } from './modules/waitlist/waitlist.module'; import { GlobalExceptionFilter } from './common/filters/global-exception.filter'; import { StrictValidationPipe } from './common/pipes/strict-validation.pipe'; 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, UsersModule, KnowledgeBaseModule, KnowledgeItemsModule, DocumentImportModule, LearningSessionModule, ActiveRecallModule, AiAnalysisModule, ReviewModule, FocusItemsModule, LearningActivityModule, NotificationsModule, FeedbackModule, WaitlistModule, ], providers: [ { provide: APP_FILTER, useClass: GlobalExceptionFilter }, { provide: APP_PIPE, useClass: StrictValidationPipe }, ], }) export class AppModule {}