app.module.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // apps/box-app-api/src/app.module.ts
  2. import { Module } from '@nestjs/common';
  3. import { ConfigModule, ConfigService } from '@nestjs/config';
  4. import { ScheduleModule } from '@nestjs/schedule';
  5. import { APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core';
  6. import { ResponseInterceptor } from '@box/common/interceptors/response.interceptor';
  7. import { HttpExceptionFilter } from '@box/common/filters/http-exception.filter';
  8. import { RedisCacheModule } from './redis/redis-cache.module';
  9. import { HealthModule } from './health/health.module';
  10. import { PrismaMongoModule } from './prisma/prisma-mongo.module';
  11. import { VideoModule } from './feature/video/video.module';
  12. import { AdModule } from './feature/ads/ad.module';
  13. import { HomepageModule } from './feature/homepage/homepage.module';
  14. import { SysParamsModule } from './feature/sys-params/sys-params.module';
  15. import { ImageConfigModule } from './feature/media-config/image-config.module';
  16. import { RedisModule } from '@box/db/redis/redis.module';
  17. import { RabbitmqModule } from './rabbitmq/rabbitmq.module';
  18. import { AuthModule } from './feature/auth/auth.module';
  19. import { RecommendationModule } from './feature/recommendation/recommendation.module';
  20. import path from 'path';
  21. @Module({
  22. imports: [
  23. // Global config, reuse .env + .env.app.dev at repo root
  24. ConfigModule.forRoot({
  25. isGlobal: true,
  26. envFilePath: [path.resolve(process.cwd(), '.env')],
  27. expandVariables: true,
  28. }),
  29. // Global Schedule module for CRON jobs
  30. ScheduleModule.forRoot(),
  31. // Global Redis module for RedisService
  32. RedisModule.forRootAsync({
  33. imports: [ConfigModule],
  34. inject: [ConfigService],
  35. useFactory: (configService: ConfigService) => ({
  36. host: configService.get<string>('REDIS_HOST') ?? '127.0.0.1',
  37. port: configService.get<number>('REDIS_PORT') ?? 6379,
  38. password: configService.get<string>('REDIS_PASSWORD'),
  39. db: configService.get<number>('REDIS_DB') ?? 0,
  40. keyPrefix: configService.get<string>('REDIS_KEY_PREFIX'),
  41. }),
  42. }),
  43. // RabbitMQ publisher for user login events
  44. RabbitmqModule,
  45. // Global Redis cache
  46. RedisCacheModule,
  47. // Mongo Prisma client for box_app DB (stub, to wire real client later)
  48. PrismaMongoModule,
  49. // Simple health endpoint
  50. AuthModule,
  51. HealthModule,
  52. VideoModule,
  53. AdModule,
  54. // RecommendationModule,
  55. HomepageModule,
  56. SysParamsModule,
  57. ImageConfigModule,
  58. ],
  59. providers: [
  60. {
  61. provide: APP_INTERCEPTOR,
  62. useClass: ResponseInterceptor,
  63. },
  64. {
  65. provide: APP_FILTER,
  66. useClass: HttpExceptionFilter,
  67. },
  68. ],
  69. })
  70. export class AppModule {}