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 { QueueModule } from "./common/queue/queue.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"; import { SalesforceEventsModule } from "./vendors/salesforce/events/events.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"; // 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, QueueModule, AuditModule, EmailModule, // === EXTERNAL INTEGRATIONS === VendorsModule, SalesforceEventsModule, JobsModule, // === FEATURE MODULES === AuthModule, UsersModule, MappingsModule, CatalogModule, OrdersModule, InvoicesModule, SubscriptionsModule, CasesModule, // === SYSTEM MODULES === HealthModule, // === ROUTING === RouterModule.register(apiRoutes), ], }) export class AppModule {}