Assist_Design/apps/bff/src/app.module.ts

98 lines
3.1 KiB
TypeScript
Raw Normal View History

import { Module } from "@nestjs/common";
import { APP_INTERCEPTOR } from "@nestjs/core";
import { RouterModule } from "@nestjs/core";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { ThrottlerModule } from "@nestjs/throttler";
2025-08-21 15:24:40 +09:00
// Configuration
import { appConfig } from "@bff/core/config/app.config";
import { createThrottlerConfig } from "@bff/core/config/throttler.config";
import { apiRoutes } from "@bff/core/config/router.config";
// Core Modules
import { LoggingModule } from "@bff/core/logging/logging.module";
import { PrismaModule } from "@bff/infra/database/prisma.module";
import { RedisModule } from "@bff/infra/redis/redis.module";
import { CacheModule } from "@bff/infra/cache/cache.module";
import { QueueModule } from "@bff/infra/queue/queue.module";
import { AuditModule } from "@bff/infra/audit/audit.module";
import { EmailModule } from "@bff/infra/email/email.module";
// External Integration Modules
import { IntegrationsModule } from "@bff/integrations/integrations.module";
import { SalesforceEventsModule } from "@bff/integrations/salesforce/events/events.module";
// Feature Modules
import { AuthModule } from "@bff/modules/auth/auth.module";
import { UsersModule } from "@bff/modules/users/users.module";
import { MappingsModule } from "@bff/modules/id-mappings/mappings.module";
import { CatalogModule } from "@bff/modules/catalog/catalog.module";
import { OrdersModule } from "@bff/modules/orders/orders.module";
import { InvoicesModule } from "@bff/modules/invoices/invoices.module";
import { SubscriptionsModule } from "@bff/modules/subscriptions/subscriptions.module";
// System Modules
import { HealthModule } from "@bff/modules/health/health.module";
import { SuccessResponseInterceptor } from "@bff/core/http/success-response.interceptor";
/**
* 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),
2025-08-22 17:02:49 +09:00
// === INFRASTRUCTURE ===
2025-08-21 15:24:40 +09:00
LoggingModule,
2025-08-22 17:02:49 +09:00
ThrottlerModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: createThrottlerConfig,
2025-08-22 17:02:49 +09:00
}),
// === CORE SERVICES ===
PrismaModule,
RedisModule,
2025-08-21 15:24:40 +09:00
CacheModule,
QueueModule,
AuditModule,
EmailModule,
// === EXTERNAL INTEGRATIONS ===
IntegrationsModule,
SalesforceEventsModule,
2025-08-22 17:02:49 +09:00
// === FEATURE MODULES ===
AuthModule,
UsersModule,
MappingsModule,
CatalogModule,
OrdersModule,
InvoicesModule,
SubscriptionsModule,
// === SYSTEM MODULES ===
HealthModule,
// === ROUTING ===
RouterModule.register(apiRoutes),
],
providers: [
{
provide: APP_INTERCEPTOR,
useClass: SuccessResponseInterceptor,
},
],
})
export class AppModule {}