import { Module } from '@nestjs/common'; import { RouterModule } from '@nestjs/core'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ThrottlerModule } from '@nestjs/throttler'; // Configuration import { appConfig } from './common/config/app.config'; import { createThrottlerConfig } from './common/config/throttler.config'; import { apiRoutes } from './common/config/router.config'; // Core Infrastructure Modules import { LoggingModule } from './common/logging/logging.module'; import { PrismaModule } from './common/prisma/prisma.module'; import { RedisModule } from './common/redis/redis.module'; import { CacheModule } from './common/cache/cache.module'; import { AuditModule } from './common/audit/audit.module'; import { EmailModule } from './common/email/email.module'; // External Integration Modules import { VendorsModule } from './vendors/vendors.module'; import { JobsModule } from './jobs/jobs.module'; // Feature Modules 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'; // System Modules import { HealthModule } from './health/health.module'; /** * Main application module * * Architecture: * - Core infrastructure modules provide foundational services * - External integration modules handle third-party services * - Feature modules implement business logic * - System modules provide monitoring and health checks * * All feature modules are grouped under "/api" prefix via RouterModule * Health endpoints remain at root level for monitoring tools */ @Module({ imports: [ // === CONFIGURATION === ConfigModule.forRoot(appConfig), // === INFRASTRUCTURE === LoggingModule, ThrottlerModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: createThrottlerConfig, }), // === CORE SERVICES === PrismaModule, RedisModule, CacheModule, AuditModule, EmailModule, // === EXTERNAL INTEGRATIONS === VendorsModule, JobsModule, // === FEATURE MODULES === AuthModule, UsersModule, MappingsModule, CatalogModule, OrdersModule, InvoicesModule, SubscriptionsModule, CasesModule, WebhooksModule, // === SYSTEM MODULES === HealthModule, // === ROUTING === RouterModule.register(apiRoutes), ], }) export class AppModule {}