import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { AssistantModule } from './assistant/assistant.module'; import { AuditModule } from './audit/audit.module'; import { AuthModule } from './auth/auth.module'; import { DashboardModule } from './dashboard/dashboard.module'; import { ListTemplatesModule } from './list-templates/list-templates.module'; import { ListsModule } from './lists/lists.module'; import { MailModule } from './mail/mail.module'; import { McpModule } from './mcp/mcp.module'; import { NotificationsModule } from './notifications/notifications.module'; import { TasksModule } from './tasks/tasks.module'; import { databaseLoggerOptionsFromEnv, parseDatabaseLogging, slowQueryThresholdFromEnv, } from './database/database-logging.config'; import { DatabaseLogger } from './database/database.logger'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), TypeOrmModule.forRootAsync({ inject: [ConfigService], useFactory: (configService: ConfigService) => { const env = { DB_LOGGING: configService.get('DB_LOGGING', 'false'), DB_LOG_PARAMETERS: configService.get( 'DB_LOG_PARAMETERS', 'false', ), DB_LOG_MAX_PARAM_LENGTH: configService.get( 'DB_LOG_MAX_PARAM_LENGTH', '500', ), DB_SLOW_QUERY_THRESHOLD_MS: configService.get( 'DB_SLOW_QUERY_THRESHOLD_MS', '500', ), }; return { type: 'mysql', host: configService.get('DB_HOST', 'localhost'), port: Number(configService.get('DB_PORT', '3306')), username: configService.get('DB_USERNAME', 'root'), password: configService.get('DB_PASSWORD', ''), database: configService.get('DB_DATABASE', 'listify'), autoLoadEntities: true, synchronize: true, logging: parseDatabaseLogging(env.DB_LOGGING), logger: new DatabaseLogger(databaseLoggerOptionsFromEnv(env)), maxQueryExecutionTime: slowQueryThresholdFromEnv(env), }; }, }), EventEmitterModule.forRoot(), AssistantModule, AuditModule, AuthModule, DashboardModule, MailModule, ListsModule, ListTemplatesModule, TasksModule, NotificationsModule, McpModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {}