import './boilerplate.polyfill'; import path from 'node:path'; import { BullModule } from '@nestjs/bull'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ScheduleModule } from '@nestjs/schedule'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AcceptLanguageResolver, HeaderResolver, I18nModule, QueryResolver, } from 'nestjs-i18n'; import { DataSource } from 'typeorm'; import { addTransactionalDataSource } from 'typeorm-transactional'; import { ActivityRecordModule } from './modules/activity-record/activity-record.module'; import { AdminConfigModule } from './modules/admin-config/admin-config.module'; import { AuditLogModule } from './modules/audit-log/audit-log.module'; import { AuthModule } from './modules/auth/auth.module'; import { BlockModule } from './modules/block/block.module'; import { CronModule } from './modules/cron/cron.module'; import { EmployeeModule } from './modules/employee/employee.module'; import { HealthCheckerModule } from './modules/health-checker/health-checker.module'; import { IncentiveModule } from './modules/incentive/incentive.module'; import { MonthlyRecordModule } from './modules/monthly-record/monthly-record.module'; import { OtModule } from './modules/ot/ot.module'; import { PublicHolidayModule } from './modules/public-holiday/public-holiday.module'; import { RainfallModule } from './modules/rainfall/rainfall.module'; import { ReportModule } from './modules/report/report.module'; import { SectorModule } from './modules/sector/sector.module'; import { UserModule } from './modules/user/user.module'; import { VehicleModule } from './modules/vehicle/vehicle.module'; import { ApiConfigService } from './shared/services/api-config.service'; import { SharedModule } from './shared/shared.module'; @Module({ imports: [ AuthModule, AuditLogModule, AdminConfigModule, BlockModule, UserModule, ActivityRecordModule, EmployeeModule, OtModule, IncentiveModule, MonthlyRecordModule, CronModule, PublicHolidayModule, ReportModule, RainfallModule, VehicleModule, SectorModule, ScheduleModule.forRoot(), ConfigModule.forRoot({ isGlobal: true, envFilePath: '.env', }), TypeOrmModule.forRootAsync({ imports: [SharedModule], useFactory: (configService: ApiConfigService) => configService.postgresConfig, inject: [ApiConfigService], dataSourceFactory: (options) => { if (!options) { throw new Error('Invalid options passed'); } return Promise.resolve( addTransactionalDataSource(new DataSource(options)), ); }, }), I18nModule.forRootAsync({ useFactory: (configService: ApiConfigService) => ({ fallbackLanguage: configService.fallbackLanguage, loaderOptions: { path: path.join(__dirname, '/i18n/'), watch: configService.isDevelopment, }, resolvers: [ { use: QueryResolver, options: ['lang'] }, AcceptLanguageResolver, new HeaderResolver(['x-lang']), ], }), imports: [SharedModule], inject: [ApiConfigService], }), BullModule.forRootAsync({ useFactory: (configService: ApiConfigService) => ({ redis: configService.redisConfig, }), imports: [SharedModule], inject: [ApiConfigService], }), HealthCheckerModule, ], providers: [], }) export class AppModule {}