import { BullModule } from '@nestjs/bullmq'; import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ScheduleModule } from '@nestjs/schedule'; import { ThrottlerModule } from '@nestjs/throttler'; import { validateEnv } from './config/env.validation'; import { AdminAuditModule } from './modules/admin-audit/admin-audit.module'; import { AdminAuthModule } from './modules/admin-auth/admin-auth.module'; import { AuthModule } from './modules/auth/auth.module'; import { CampaignModule } from './modules/campaign/campaign.module'; import { ChanceModule } from './modules/chance/chance.module'; import { PrizeModule } from './modules/prize/prize.module'; import { ReportModule } from './modules/report/report.module'; import { SmsModule } from './modules/sms/sms.module'; import { SpinEngineModule } from './modules/spin-engine/spin-engine.module'; import { StorageModule } from './modules/storage/storage.module'; import { UserModule } from './modules/user/user.module'; import { WinnerModule } from './modules/winner/winner.module'; import { PrismaModule } from './prisma/prisma.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, validate: validateEnv, envFilePath: '.env', }), ScheduleModule.forRoot(), ThrottlerModule.forRoot([ { name: 'default', ttl: 60000, limit: 60, }, ]), BullModule.forRootAsync({ imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ connection: { host: configService.get('REDIS_HOST', 'localhost'), port: configService.get('REDIS_PORT', 6379), password: configService.get('REDIS_PASSWORD') || undefined, }, }), inject: [ConfigService], }), PrismaModule, AuthModule, AdminAuthModule, StorageModule, CampaignModule, PrizeModule, ChanceModule, UserModule, SmsModule, SpinEngineModule, WinnerModule, ReportModule, AdminAuditModule, ], }) export class AppModule {}