36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { Global, Module } from '@nestjs/common';
|
|
import { ConfigModule } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { DataSource } from 'typeorm';
|
|
import { DatabaseConfig, databaseConfig } from './database.config';
|
|
import { APP_DATASOURCES } from './database.constants';
|
|
import { typeormTransactionalDataSourceFactory } from './utils/typeorm-data-source-factory';
|
|
import { typeormModuleOptionsFactory } from './utils/typeorm-module-options-factory';
|
|
|
|
const dataSources: DataSource[] = [];
|
|
|
|
const typeormModules = [
|
|
TypeOrmModule.forRootAsync({
|
|
imports: databaseConfig.asProvider().imports,
|
|
dataSourceFactory: typeormTransactionalDataSourceFactory(),
|
|
useFactory: async (dbConfig: DatabaseConfig) => {
|
|
const config = await typeormModuleOptionsFactory(dbConfig);
|
|
return config;
|
|
},
|
|
inject: [databaseConfig.KEY],
|
|
}),
|
|
];
|
|
|
|
const dataSourcesProvider = {
|
|
provide: APP_DATASOURCES,
|
|
useValue: dataSources,
|
|
};
|
|
|
|
@Global()
|
|
@Module({
|
|
imports: [ConfigModule.forFeature(databaseConfig), ...typeormModules],
|
|
providers: [dataSourcesProvider],
|
|
exports: [...typeormModules, dataSourcesProvider],
|
|
})
|
|
export class AppDatabaseModule {}
|