app.module.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 { MediaConfigModule } from './feature/media-config/media-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. import { ChannelModule } from './feature/channel/channel.module';
  22. @Module({
  23. imports: [
  24. // Global config, reuse .env + .env.app.dev at repo root
  25. ConfigModule.forRoot({
  26. isGlobal: true,
  27. envFilePath: [path.resolve(process.cwd(), '.env')],
  28. expandVariables: true,
  29. }),
  30. // Global Schedule module for CRON jobs
  31. ScheduleModule.forRoot(),
  32. // Global Redis module for RedisService
  33. RedisModule.forRootAsync({
  34. imports: [ConfigModule],
  35. inject: [ConfigService],
  36. useFactory: (configService: ConfigService) => ({
  37. host: configService.get<string>('REDIS_HOST') ?? '127.0.0.1',
  38. port: configService.get<number>('REDIS_PORT') ?? 6379,
  39. password: configService.get<string>('REDIS_PASSWORD'),
  40. db: configService.get<number>('REDIS_DB') ?? 0,
  41. keyPrefix: configService.get<string>('REDIS_KEY_PREFIX'),
  42. }),
  43. }),
  44. // RabbitMQ publisher for user login events
  45. RabbitmqModule,
  46. // Global Redis cache
  47. RedisCacheModule,
  48. // Mongo Prisma client for box_app DB (stub, to wire real client later)
  49. PrismaMongoModule,
  50. // Simple health endpoint
  51. AuthModule,
  52. HealthModule,
  53. VideoModule,
  54. AdModule,
  55. // RecommendationModule,
  56. HomepageModule,
  57. SysParamsModule,
  58. MediaConfigModule,
  59. ChannelModule,
  60. ],
  61. providers: [
  62. {
  63. provide: APP_INTERCEPTOR,
  64. useClass: ResponseInterceptor,
  65. },
  66. {
  67. provide: APP_FILTER,
  68. useClass: HttpExceptionFilter,
  69. },
  70. ],
  71. })
  72. export class AppModule {}