import { Module, ValidationPipe } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppService } from './services/app';
import CustomTypeOrmModule from './providers/typeorm.module';
import entities from './models';
import { AppController } from './controllers/app';
import { APP_FILTER, APP_PIPE } from '@nestjs/core';
import { NotFoundFilter } from './providers/exception';
import { SourceController } from './controllers/source';
import { SourceTaskController } from './controllers/sourceTask';
import { SourceService } from './services/source';
import { SourceTaskService } from './services/sourceTask';
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === 'test' ? '.env.test' : '.env',
    }),
    CustomTypeOrmModule.forRootAsync(null, {
      entities,
      // FIXME: using db migration instead of synchronize
      synchronize: true,
    }),
  ],
  controllers: [AppController, SourceController, SourceTaskController],
  providers: [
    { provide: APP_FILTER, useClass: NotFoundFilter },
    {
      provide: APP_PIPE,
      useFactory: () => {
        return new ValidationPipe({ transform: true });
      },
    },
    AppService,
    SourceService,
    SourceTaskService,
  ],
})
export class AppModule {}
