49 lines
1.7 KiB
TypeScript
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 {}
|