Files
dh-inspeccion-v2/api-v3/src/app.module.ts
T

91 lines
3.5 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { APP_GUARD } from '@nestjs/core';
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuditModule } from './audit/audit.module';
import { AdministrationModule } from './administration/administration.module';
import { AuthorizationModule } from './authorization/authorization.module';
import { PermissionsGuard } from './authorization/guards/permissions.guard';
import { AuthModule } from './auth/auth.module';
import { AccessTokenGuard } from './auth/guards/access-token.guard';
import { CsrfGuard } from './auth/guards/csrf.guard';
import { PhaseADataModule } from './core-data/phase-a-data.module';
import { HealthController } from './health.controller';
import { HealthService } from './health.service';
import { DashboardModule } from './dashboard/dashboard.module';
import { AssetMasterModule } from './asset-master/asset-master.module';
import { SurveyPlanningModule } from './survey-planning/survey-planning.module';
import { SurveyExecutionModule } from './survey-execution/survey-execution.module';
import { InspectionVisitsModule } from './inspection-visits/inspection-visits.module';
import { InspectionActsModule } from './inspection-acts/inspection-acts.module';
import { InspectionFindingsModule } from './inspection-findings/inspection-findings.module';
import { InspectionClosingModule } from './inspection-closing/inspection-closing.module';
import { AssetImportsModule } from './asset-imports/asset-imports.module';
import { InspectionReportsModule } from './inspection-reports/inspection-reports.module';
import { InspectionVerificationsModule } from './inspection-verifications/inspection-verifications.module';
function required(config: ConfigService, key: string): string {
const value = config.get<string>(key);
if (!value) throw new Error(`Missing required environment variable: ${key}`);
return value;
}
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
ignoreEnvFile: true,
}),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
type: 'postgres',
host: required(config, 'DB_HOST'),
port: Number(config.get<string>('DB_PORT') ?? 5432),
database: required(config, 'DB_NAME'),
username: required(config, 'DB_APP_USER'),
password: required(config, 'DB_APP_PASSWORD'),
autoLoadEntities: true,
synchronize: false,
migrationsRun: false,
logging: false,
applicationName: 'dhv2-api',
connectTimeoutMS: 5000,
}),
}),
ThrottlerModule.forRoot([
{
name: 'default',
ttl: 60_000,
limit: 120,
},
]),
PhaseADataModule,
AuditModule,
AuthorizationModule,
AuthModule,
AdministrationModule,
DashboardModule,
AssetMasterModule,
SurveyPlanningModule,
SurveyExecutionModule,
InspectionVisitsModule,
InspectionActsModule,
InspectionFindingsModule,
InspectionClosingModule,
InspectionReportsModule,
InspectionVerificationsModule,
AssetImportsModule,
],
controllers: [HealthController],
providers: [
HealthService,
{ provide: APP_GUARD, useClass: ThrottlerGuard },
{ provide: APP_GUARD, useClass: AccessTokenGuard },
{ provide: APP_GUARD, useClass: PermissionsGuard },
{ provide: APP_GUARD, useClass: CsrfGuard },
],
})
export class AppModule {}