import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ScheduleModule as NestScheduleModule } from '@nestjs/schedule'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuthModule } from './modules/auth/auth.module'; import { EmailModule } from './modules/email/email.module'; import { CampusModule } from './modules/campus/campus.module'; import { CoursesModule } from './modules/courses/courses.module'; import { EnrollmentsModule } from './modules/enrollments/enrollments.module'; import { FilesModule } from './modules/files/files.module'; import { AssignmentsModule } from './modules/assignments/assignments.module'; import { GradesModule } from './modules/grades/grades.module'; import { AttendanceModule } from './modules/attendance/attendance.module'; import { QuizzesModule } from './modules/quizzes/quizzes.module'; import { LabsModule } from './modules/labs/labs.module'; import { NotificationsModule } from './modules/notifications/notifications.module'; import { MessagingModule } from './modules/messaging/messaging.module'; import { DiscussionsModule } from './modules/discussions/discussions.module'; import { AnnouncementsModule } from './modules/announcements/announcements.module'; import { CommunityModule } from './modules/community/community.module'; import { ScheduleModule } from './modules/schedule/schedule.module'; import { CourseMaterialsModule } from './modules/course-materials/course-materials.module'; import { TasksModule } from './modules/tasks/tasks.module'; import { ReportsModule } from './modules/reports/reports.module'; import { SearchModule } from './modules/search/search.module'; import { AnalyticsModule } from './modules/analytics/analytics.module'; import { SecurityModule } from './modules/security/security.module'; import { SettingsModule } from './modules/settings/settings.module'; import { MonitoringModule } from './modules/monitoring/monitoring.module'; import { BackupModule } from './modules/backup/backup.module'; import { StudyGroupsModule } from './modules/study-groups/study-groups.module'; import { OfficeHoursModule } from './modules/office-hours/office-hours.module'; import { PeerReviewModule } from './modules/peer-review/peer-review.module'; import { PaymentsModule } from './modules/payments/payments.module'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import databaseConfig from './config/database.config'; import { YoutubeModule } from './modules/youtube/youtube.module'; import { GoogleDriveModule } from './modules/google-drive/google-drive.module'; import { QuestionBankModule } from './modules/question-bank/question-bank.module'; import { ExamsModule } from './modules/exams/exams.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [databaseConfig], envFilePath: '.env', }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => { const dbConfig = configService.get('database'); if (!dbConfig) { throw new Error('Database configuration is missing'); } return { type: 'mysql', host: dbConfig.host, port: dbConfig.port, username: dbConfig.username, password: dbConfig.password, database: dbConfig.database, autoLoadEntities: true, migrations: [__dirname + '/database/migrations/*{.ts,.js}'], migrationsRun: false, synchronize: dbConfig.synchronize, logging: dbConfig.logging, ssl: dbConfig.ssl, }; }, }), NestScheduleModule.forRoot(), AuthModule, EmailModule, CampusModule, CoursesModule, EnrollmentsModule, YoutubeModule, GoogleDriveModule, FilesModule, AssignmentsModule, GradesModule, AttendanceModule, QuizzesModule, LabsModule, NotificationsModule, MessagingModule, DiscussionsModule, AnnouncementsModule, CommunityModule, ScheduleModule, CourseMaterialsModule, TasksModule, ReportsModule, SearchModule, AnalyticsModule, SecurityModule, SettingsModule, MonitoringModule, BackupModule, StudyGroupsModule, OfficeHoursModule, PeerReviewModule, QuestionBankModule, ExamsModule, PaymentsModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule { }