dependencies Legend  Declarations  Module  Bootstrap  Providers  Exports cluster_AppModule cluster_AppModule_providers cluster_AppModule_imports AiModule AiModule AppModule AppModule AiModule->AppModule AuthModule AuthModule AuthModule->AppModule CommentModule CommentModule CommentModule->AppModule CountryModule CountryModule CountryModule->AppModule EpisodeModule EpisodeModule EpisodeModule->AppModule GenreModule GenreModule GenreModule->AppModule LanguageModule LanguageModule LanguageModule->AppModule PaginationModule PaginationModule PaginationModule->AppModule PeopleModule PeopleModule PeopleModule->AppModule SeasonModule SeasonModule SeasonModule->AppModule TitlesModule TitlesModule TitlesModule->AppModule UploadCenterModule UploadCenterModule UploadCenterModule->AppModule UsersModule UsersModule UsersModule->AppModule VideoLinkModule VideoLinkModule VideoLinkModule->AppModule HttpAccessTokenGuard HttpAccessTokenGuard HttpAccessTokenGuard->AppModule WsAccessTokenGuard WsAccessTokenGuard WsAccessTokenGuard->AppModule
import { ClassSerializerInterceptor, Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { UsersModule } from './user/users.module';
import appConfig from './config/app.config';
import databaseConfig from './config/database.config';
import envValidation from './config/env.validation';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PaginationModule } from './common/pagination/pagination.module';
import { APP_GUARD, APP_INTERCEPTOR, Reflector } from '@nestjs/core';
import { DataResponseInterceptor } from './common/interceptors/data-response/data-response.interceptor';
import { AuthModule } from './auth/auth.module';
import { AuthenticationGuard } from './auth/guards/authentication.guard';
import { HttpAccessTokenGuard } from './auth/guards/http-access-token.guard';
import jwtConfig from './auth/config/jwt.config';
import { JwtModule } from '@nestjs/jwt';
import { AuthorizationGuard } from './auth/guards/authorization.guard';
import { CheckRoleGuard } from './auth/guards/check-role.guard';
import { TitlesModule } from './titles/titles.module';
import { PeopleModule } from './people/people.module';
import { CommentModule } from './comment/comment.module';
import { SeasonModule } from './season/season.module';
import { EpisodeModule } from './episode/episode.module';
import { CountryModule } from './country/country.module';
import { GenreModule } from './genre/genre.module';
import { LanguageModule } from './language/language.module';
import { VideoLinkModule } from './video-link/video-link.module';
import { UploadCenterModule } from './upload-center/upload-center.module';
import { AiModule } from './ai/ai.module';
import { WsAccessTokenGuard } from './auth/guards/ws-access-token.guard';

/**
 * Get the current NODE_ENV
 */
const ENV = process.env.NODE_ENV;

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: !ENV ? '.env' : `.env.${ENV}`,
      load: [appConfig, databaseConfig],
      validationSchema: envValidation,
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => ({
        type: 'postgres',
        synchronize: configService.get('database.synchronize'),
        port: configService.get('database.port'),
        username: configService.get('database.user'),
        password: configService.get('database.password'),
        host: configService.get('database.host'),
        autoLoadEntities: configService.get('database.autoLoadEntities'),
        database: configService.get('database.name'),
      }),
    }),
    ConfigModule.forFeature(jwtConfig),
    JwtModule.registerAsync(jwtConfig.asProvider()),
    UsersModule,
    PaginationModule,
    AuthModule,
    TitlesModule,
    PeopleModule,
    CommentModule,
    SeasonModule,
    EpisodeModule,
    CountryModule,
    GenreModule,
    LanguageModule,
    VideoLinkModule,
    UploadCenterModule,
    AiModule,
  ],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: DataResponseInterceptor,
    },
    {
      provide: APP_GUARD,
      useClass: AuthenticationGuard,
    },
    {
      provide: APP_GUARD,
      useClass: AuthorizationGuard,
    },
    {
      provide: APP_INTERCEPTOR,
      useFactory: (reflector: Reflector) => {
        return new ClassSerializerInterceptor(reflector);
      },
      inject: [Reflector],
    },
    HttpAccessTokenGuard,
    WsAccessTokenGuard,
    CheckRoleGuard,
  ],
})
export class AppModule {}

results matching ""

    No results matching ""