import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ThrottlerModule } from '@nestjs/throttler'; import { AuthModule } from './auth/auth.module'; import { UsersModule } from './users/users.module'; import { MappingsModule } from './mappings/mappings.module'; import { CatalogModule } from './catalog/catalog.module'; import { OrdersModule } from './orders/orders.module'; import { InvoicesModule } from './invoices/invoices.module'; import { SubscriptionsModule } from './subscriptions/subscriptions.module'; import { CasesModule } from './cases/cases.module'; import { WebhooksModule } from './webhooks/webhooks.module'; import { VendorsModule } from './vendors/vendors.module'; import { JobsModule } from './jobs/jobs.module'; import { HealthModule } from './health/health.module'; import { PrismaModule } from './common/prisma/prisma.module'; import { AuditModule } from './common/audit/audit.module'; import { RedisModule } from './common/redis/redis.module'; import { LoggingModule } from './common/logging/logging.module'; import { CacheModule } from './common/cache/cache.module'; import * as path from 'path'; import { validateEnv } from './common/config/env.validation'; // Support multiple .env files across environments and run contexts const repoRoot = path.resolve(__dirname, '../../../..'); const nodeEnv = process.env.NODE_ENV || 'development'; const envFilePath = [ // Prefer repo root env files path.resolve(repoRoot, `.env.${nodeEnv}.local`), path.resolve(repoRoot, `.env.${nodeEnv}`), path.resolve(repoRoot, '.env.local'), path.resolve(repoRoot, '.env'), // Fallback to local working directory `.env.${nodeEnv}.local`, `.env.${nodeEnv}`, '.env.local', '.env', ]; @Module({ imports: [ // Configuration ConfigModule.forRoot({ isGlobal: true, envFilePath, validate: validateEnv, }), // Logging LoggingModule, // Rate limiting ThrottlerModule.forRoot([ { ttl: 60000, // 1 minute limit: 100, // 100 requests per minute }, ]), // Core modules PrismaModule, RedisModule, CacheModule, AuditModule, VendorsModule, JobsModule, HealthModule, // Feature modules AuthModule, UsersModule, MappingsModule, CatalogModule, OrdersModule, InvoicesModule, SubscriptionsModule, CasesModule, WebhooksModule, ], }) export class AppModule {}