import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; import { AuthModule } from './auth/auth.module'; import databaseConfig from './config/database.config'; import authConfig from './config/auth.config'; import appConfig from './config/app.config'; import mailConfig from './config/mail.config'; import fileConfig from './config/file.config'; import * as path from 'path'; import { MailerModule } from '@nestjs-modules/mailer'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { I18nModule } from 'nestjs-i18n/dist/i18n.module'; import { HeaderResolver } from 'nestjs-i18n'; import { TypeOrmConfigService } from './database/typeorm-config.service'; import { MailConfigService } from './mail/mail-config.service'; import { ForgotModule } from './forgot/forgot.module'; import { MailModule } from './mail/mail.module'; import { DataSource } from 'typeorm'; import { PlayersModule } from './players/players.module'; import { TeamsModule } from './teams/teams.module'; import { TransactionsModule } from './transactions/transactions.module'; import { TeamSettingsModule } from './team-settings/team-settings.module'; import { TeamWalletTransactionsModule } from './team-wallet-transactions/team-wallet-transactions.module'; import { ServeStaticModule } from '@nestjs/serve-static'; import { join } from 'path'; import { LoggingModule } from './database/logging/logging.module'; import { TranslateModule } from './translate/translate.module'; import { PenaltyModule } from './penalty/penalty.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [databaseConfig, authConfig, appConfig, mailConfig, fileConfig], envFilePath: ['.env'], }), TypeOrmModule.forRootAsync({ useClass: TypeOrmConfigService, dataSourceFactory: async (options) => { const dataSource = await new DataSource(options).initialize(); return dataSource; }, }), MailerModule.forRootAsync({ useClass: MailConfigService, }), I18nModule.forRootAsync({ useFactory: (configService: ConfigService) => ({ fallbackLanguage: configService.get('app.fallbackLanguage'), loaderOptions: { path: path.join(__dirname, '/i18n/'), watch: true }, }), resolvers: [ { use: HeaderResolver, useFactory: (configService: ConfigService) => { return [configService.get('app.headerLanguage')]; }, inject: [ConfigService], }, ], imports: [ConfigModule], inject: [ConfigService], }), ServeStaticModule.forRoot({ rootPath: join(__dirname, '../client'), exclude: ['*/api*'], }), UsersModule, AuthModule, ForgotModule, MailModule, PlayersModule, TeamsModule, TransactionsModule, TeamSettingsModule, TeamWalletTransactionsModule, LoggingModule, TranslateModule, PenaltyModule, ], providers: [], }) export class AppModule {}