2025-08-20 18:02:50 +09:00
|
|
|
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';
|
2025-08-21 15:24:40 +09:00
|
|
|
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',
|
|
|
|
|
];
|
2025-08-20 18:02:50 +09:00
|
|
|
|
|
|
|
|
@Module({
|
|
|
|
|
imports: [
|
|
|
|
|
// Configuration
|
|
|
|
|
ConfigModule.forRoot({
|
|
|
|
|
isGlobal: true,
|
2025-08-21 15:24:40 +09:00
|
|
|
envFilePath,
|
|
|
|
|
validate: validateEnv,
|
2025-08-20 18:02:50 +09:00
|
|
|
}),
|
|
|
|
|
|
2025-08-21 15:24:40 +09:00
|
|
|
// Logging
|
|
|
|
|
LoggingModule,
|
|
|
|
|
|
2025-08-20 18:02:50 +09:00
|
|
|
// Rate limiting
|
|
|
|
|
ThrottlerModule.forRoot([
|
|
|
|
|
{
|
|
|
|
|
ttl: 60000, // 1 minute
|
|
|
|
|
limit: 100, // 100 requests per minute
|
|
|
|
|
},
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
|
|
// Core modules
|
|
|
|
|
PrismaModule,
|
|
|
|
|
RedisModule,
|
2025-08-21 15:24:40 +09:00
|
|
|
CacheModule,
|
2025-08-20 18:02:50 +09:00
|
|
|
AuditModule,
|
|
|
|
|
VendorsModule,
|
|
|
|
|
JobsModule,
|
|
|
|
|
HealthModule,
|
|
|
|
|
|
|
|
|
|
// Feature modules
|
|
|
|
|
AuthModule,
|
|
|
|
|
UsersModule,
|
|
|
|
|
MappingsModule,
|
|
|
|
|
CatalogModule,
|
|
|
|
|
OrdersModule,
|
|
|
|
|
InvoicesModule,
|
|
|
|
|
SubscriptionsModule,
|
|
|
|
|
CasesModule,
|
|
|
|
|
WebhooksModule,
|
|
|
|
|
],
|
|
|
|
|
})
|
|
|
|
|
export class AppModule {}
|