import { Module, MiddlewareConsumer, NestModule } from '@nestjs/common'; import { APP_GUARD } from '@nestjs/core'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AppController } from './app.controller'; import { DatabaseModule } from './database/database.module'; import { TenantMiddleware } from './database/tenant.middleware'; import { WriteAccessGuard } from './common/guards/write-access.guard'; import { AuthModule } from './modules/auth/auth.module'; import { OrganizationsModule } from './modules/organizations/organizations.module'; import { UsersModule } from './modules/users/users.module'; import { AccountsModule } from './modules/accounts/accounts.module'; import { FiscalPeriodsModule } from './modules/fiscal-periods/fiscal-periods.module'; import { JournalEntriesModule } from './modules/journal-entries/journal-entries.module'; import { BudgetsModule } from './modules/budgets/budgets.module'; import { UnitsModule } from './modules/units/units.module'; import { InvoicesModule } from './modules/invoices/invoices.module'; import { PaymentsModule } from './modules/payments/payments.module'; import { VendorsModule } from './modules/vendors/vendors.module'; import { ReserveComponentsModule } from './modules/reserve-components/reserve-components.module'; import { InvestmentsModule } from './modules/investments/investments.module'; import { CapitalProjectsModule } from './modules/capital-projects/capital-projects.module'; import { ReportsModule } from './modules/reports/reports.module'; import { AssessmentGroupsModule } from './modules/assessment-groups/assessment-groups.module'; import { ProjectsModule } from './modules/projects/projects.module'; import { MonthlyActualsModule } from './modules/monthly-actuals/monthly-actuals.module'; import { AttachmentsModule } from './modules/attachments/attachments.module'; import { InvestmentPlanningModule } from './modules/investment-planning/investment-planning.module'; import { HealthScoresModule } from './modules/health-scores/health-scores.module'; import { ScheduleModule } from '@nestjs/schedule'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => ({ type: 'postgres', url: configService.get('DATABASE_URL'), autoLoadEntities: true, synchronize: false, logging: false, }), }), DatabaseModule, AuthModule, OrganizationsModule, UsersModule, AccountsModule, FiscalPeriodsModule, JournalEntriesModule, BudgetsModule, UnitsModule, InvoicesModule, PaymentsModule, VendorsModule, ReserveComponentsModule, InvestmentsModule, CapitalProjectsModule, ReportsModule, AssessmentGroupsModule, ProjectsModule, MonthlyActualsModule, AttachmentsModule, InvestmentPlanningModule, HealthScoresModule, ScheduleModule.forRoot(), ], controllers: [AppController], providers: [ { provide: APP_GUARD, useClass: WriteAccessGuard, }, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(TenantMiddleware).forRoutes('*'); } }