// apps/box-app-api/src/app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ScheduleModule } from '@nestjs/schedule'; import { APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core'; import { ResponseInterceptor } from '@box/common/interceptors/response.interceptor'; import { HttpExceptionFilter } from '@box/common/filters/http-exception.filter'; import { RedisCacheModule } from './redis/redis-cache.module'; import { HealthModule } from './health/health.module'; import { PrismaMongoModule } from './prisma/prisma-mongo.module'; import { VideoModule } from './feature/video/video.module'; import { AdModule } from './feature/ads/ad.module'; import { HomepageModule } from './feature/homepage/homepage.module'; import { SysParamsModule } from './feature/sys-params/sys-params.module'; import { ImageConfigModule } from './feature/media-config/image-config.module'; import { RedisModule } from '@box/db/redis/redis.module'; import { RabbitmqModule } from './rabbitmq/rabbitmq.module'; import { AuthModule } from './feature/auth/auth.module'; import { RecommendationModule } from './feature/recommendation/recommendation.module'; import path from 'path'; @Module({ imports: [ // Global config, reuse .env + .env.app.dev at repo root ConfigModule.forRoot({ isGlobal: true, envFilePath: [path.resolve(process.cwd(), '.env')], expandVariables: true, }), // Global Schedule module for CRON jobs ScheduleModule.forRoot(), // Global Redis module for RedisService RedisModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => ({ host: configService.get('REDIS_HOST') ?? '127.0.0.1', port: configService.get('REDIS_PORT') ?? 6379, password: configService.get('REDIS_PASSWORD'), db: configService.get('REDIS_DB') ?? 0, keyPrefix: configService.get('REDIS_KEY_PREFIX'), }), }), // RabbitMQ publisher for user login events RabbitmqModule, // Global Redis cache RedisCacheModule, // Mongo Prisma client for box_app DB (stub, to wire real client later) PrismaMongoModule, // Simple health endpoint AuthModule, HealthModule, VideoModule, AdModule, // RecommendationModule, HomepageModule, SysParamsModule, ImageConfigModule, ], providers: [ { provide: APP_INTERCEPTOR, useClass: ResponseInterceptor, }, { provide: APP_FILTER, useClass: HttpExceptionFilter, }, ], }) export class AppModule {}