ppob-backend/src/app.module.ts
2021-10-04 16:29:05 +07:00

49 lines
1.7 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import * as Joi from 'joi';
import { UsersModule } from './users/users.module';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
import configuration from './config/configuration';
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
validationSchema: Joi.object({
NODE_ENV: Joi.string()
.valid('development', 'production', 'test', 'provision')
.default('development'),
PORT: Joi.number().default(3000),
DATABASE_CLIENT: Joi.valid('mysql', 'postgres'),
DATABASE_HOST: Joi.string(),
DATABASE_NAME: Joi.string(),
DATABASE_USERNAME: Joi.string(),
DATABASE_PASSWORD: Joi.string().empty('').default(''),
DATABASE_PORT: Joi.number().default(5432),
}),
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => {
return {
type: configService.get<'postgres' | 'mysql'>('database.client'),
host: configService.get<string>('database.host'),
port: configService.get<number>('database.port'),
username: configService.get<string>('database.username'),
password: configService.get<string>('database.password'),
database: configService.get<string>('database.name'),
entities: [],
synchronize: true,
autoLoadEntities: true,
logging: true,
namingStrategy: new SnakeNamingStrategy(),
};
},
inject: [ConfigService],
}),
UsersModule,
],
})
export class AppModule {}