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

82 lines
2.4 KiB
TypeScript
Raw Normal View History

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',
];
@Module({
imports: [
// Configuration
ConfigModule.forRoot({
isGlobal: true,
2025-08-21 15:24:40 +09:00
envFilePath,
validate: validateEnv,
}),
2025-08-21 15:24:40 +09:00
// Logging
LoggingModule,
// 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,
AuditModule,
VendorsModule,
JobsModule,
HealthModule,
// Feature modules
AuthModule,
UsersModule,
MappingsModule,
CatalogModule,
OrdersModule,
InvoicesModule,
SubscriptionsModule,
CasesModule,
WebhooksModule,
],
})
export class AppModule {}