import { AliyunModule } from './aliyun/aliyun.module' import { Module } from '@nestjs/common' import { ConfigModule, ConfigService } from '@nestjs/config' import { TypeOrmModule } from '@nestjs/typeorm' import { AppController } from './app.controller' import { AppService } from './app.service' import { UsersModule } from './users/users.module' import { ThrottlerModule } from '@nestjs/throttler' import * as Yup from 'yup' import { SmsModule } from './sms/sms.module' import { DevtoolsModule } from '@nestjs/devtools-integration' import { AuthModule } from './auth/auth.module' import { FileModule } from './file/file.module' import { ChatModule } from './chat/chat.module' import { MembershipModule } from './membership/membership.module' import { WeixinModule } from './weixin/weixin.module' import { NotifyModule } from './notify/notify.module' import { CommissionModule } from './commission/commission.module' import { UserBalanceModule } from './user-balance/user-balance.module' import { WithdrawModule } from './withdraw/withdraw.module' @Module({ imports: [ DevtoolsModule.register({ http: process.env.NODE_ENV !== 'production', port: 8000 }), ConfigModule.forRoot({ isGlobal: true, validationSchema: Yup.object({ TYPEORM_HOST: Yup.string().required(), TYPEORM_PORT: Yup.number().default(3306), TYPEORM_USERNAME: Yup.string().required(), TYPEORM_PASSWORD: Yup.string().required(), TYPEORM_DATABASE: Yup.string().required() }) }), ThrottlerModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ ttl: config.get('THROTTLE_TTL'), limit: config.get('THROTTLE_LIMIT') }) }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ type: 'mysql', host: config.get('TYPEORM_HOST'), port: config.get('TYPEORM_PORT'), username: config.get('TYPEORM_USERNAME'), password: config.get('TYPEORM_PASSWORD'), database: config.get('TYPEORM_DATABASE'), synchronize: true, entities: [__dirname + '/**/*.entity.{ts,js}'], migrations: ['dist/migrations/**/*.js'], subscribers: ['dist/subscriber/**/*.js'], cli: { migrationsDir: config.get('TYPEORM_MIGRATIONS_DIR'), subscribersDir: config.get('TYPEORM_SUBSCRIBERS_DIR') } }) }), AliyunModule, SmsModule, UsersModule, AuthModule, FileModule, ChatModule, MembershipModule, WeixinModule, NotifyModule, CommissionModule, UserBalanceModule, WithdrawModule ], controllers: [AppController], providers: [AppService] }) export class AppModule {}