app.module.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // apps/box-mgnt-api/src/app.module.ts
  2. import { Module, OnModuleInit } from '@nestjs/common';
  3. import { ConfigModule, ConfigService } from '@nestjs/config';
  4. import { DevtoolsModule } from '@nestjs/devtools-integration';
  5. import { ScheduleModule } from '@nestjs/schedule';
  6. import dayjs from 'dayjs';
  7. import timezone from 'dayjs/plugin/timezone.js';
  8. import utc from 'dayjs/plugin/utc.js';
  9. import { CommonModule } from '@box/common/common.module';
  10. import { SharedModule } from '@box/db/shared.module';
  11. import { appConfigFactory } from './app.config';
  12. import { validateEnvironment } from './config/env.validation';
  13. import { LoggerModule } from 'nestjs-pino';
  14. import { MgntBackendModule } from './mgnt-backend/mgnt-backend.module';
  15. import pinoConfig from '@box/common/config/pino.config';
  16. import { CacheSyncModule } from './cache-sync/cache-sync.module';
  17. import { RedisModule } from '@box/db/redis/redis.module';
  18. import { CoreModule } from '@box/core/core.module';
  19. @Module({
  20. imports: [
  21. // Global config, load from .env.mgnt then .env with validation
  22. ConfigModule.forRoot({
  23. isGlobal: true,
  24. envFilePath: ['.env.mgnt', '.env'],
  25. validate: validateEnvironment,
  26. }),
  27. ConfigModule.forFeature(appConfigFactory),
  28. ScheduleModule.forRoot(),
  29. RedisModule.forRootAsync({
  30. imports: [ConfigModule],
  31. inject: [ConfigService],
  32. useFactory: (config: ConfigService) => ({
  33. host: config.get<string>('REDIS_HOST')!,
  34. port: config.get<number>('REDIS_PORT')!,
  35. password: config.get<string>('REDIS_PASSWORD') || undefined,
  36. db: config.get<number>('REDIS_DB') ?? 0,
  37. keyPrefix: config.get<string>('REDIS_KEY_PREFIX') ?? 'box:',
  38. tls: config.get<boolean>('REDIS_TLS') ?? false,
  39. }),
  40. }),
  41. CacheSyncModule,
  42. CoreModule,
  43. CommonModule,
  44. SharedModule,
  45. LoggerModule.forRoot(pinoConfig),
  46. MgntBackendModule,
  47. DevtoolsModule.register({
  48. http: process.env.NODE_ENV === 'development',
  49. }),
  50. ],
  51. providers: [],
  52. })
  53. export class AppModule implements OnModuleInit {
  54. onModuleInit() {
  55. dayjs.extend(utc);
  56. dayjs.extend(timezone);
  57. }
  58. }