Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 92 93 94 95 96 97 98 99 100 101 102 103 104 | import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; import { ThrottlerModule } from '@nestjs/throttler'; import { BullModule } from '@nestjs/bull'; import { ScheduleModule } from '@nestjs/schedule'; // Configuration import { DatabaseConfig } from './config/database.config'; import { RedisConfig } from './config/redis.config'; import { JwtConfig } from './config/jwt.config'; import { AwsConfig } from './config/aws.config'; import { AiConfig } from './config/ai.config'; // Modules import { AuthModule } from './modules/auth/auth.module'; import { UsersModule } from './modules/users/users.module'; import { ProductsModule } from './modules/products/products.module'; import { RetailersModule } from './modules/retailers/retailers.module'; import { CouponsModule } from './modules/coupons/coupons.module'; import { RecommendationsModule } from './modules/recommendations/recommendations.module'; import { AnalyticsModule } from './modules/analytics/analytics.module'; import { NotificationsModule } from './modules/notifications/notifications.module'; import { SavingsModule } from './modules/savings/savings.module'; import { AffiliateModule } from './modules/affiliate/affiliate.module'; import { SustainabilityModule } from './modules/sustainability/sustainability.module'; import { SocialModule } from './modules/social/social.module'; import { AIModule } from './modules/ai/ai.module'; // Controllers import { AppController } from './app.controller'; // Services import { AppService } from './app.service'; @Module({ imports: [ // Configuration ConfigModule.forRoot({ isGlobal: true, load: [DatabaseConfig, RedisConfig, JwtConfig, AwsConfig, AiConfig], envFilePath: ['.env.local', '.env'], }), // Database MongooseModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ uri: configService.get<string>('database.uri') || 'mongodb://localhost:27017/savepal', maxPoolSize: 10, serverSelectionTimeoutMS: 5000, socketTimeoutMS: 45000, bufferCommands: false, }), inject: [ConfigService], }), // Redis & Bull Queue BullModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ redis: { host: configService.get<string>('redis.host'), port: configService.get<number>('redis.port'), password: configService.get<string>('redis.password'), db: configService.get<number>('redis.db'), }, }), inject: [ConfigService], }), // Rate Limiting ThrottlerModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ([{ ttl: configService.get<number>('THROTTLE_TTL', 60) * 1000, limit: configService.get<number>('THROTTLE_LIMIT', 100), }]), inject: [ConfigService], }), // Task Scheduling ScheduleModule.forRoot(), // Feature Modules AuthModule, UsersModule, ProductsModule, RetailersModule, CouponsModule, RecommendationsModule, AnalyticsModule, NotificationsModule, SavingsModule, AffiliateModule, SustainabilityModule, SocialModule, AIModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {} |