1
0

connection.module.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { DynamicModule, Module } from '@nestjs/common';
  2. import { TypeOrmModule } from '@nestjs/typeorm';
  3. import { DataSourceOptions } from 'typeorm';
  4. import { ConfigModule } from '../config/config.module';
  5. import { ConfigService } from '../config/config.service';
  6. import { TypeOrmLogger } from '../config/logger/typeorm-logger';
  7. import { TransactionSubscriber } from './transaction-subscriber';
  8. import { TransactionWrapper } from './transaction-wrapper';
  9. import { TransactionalConnection } from './transactional-connection';
  10. let defaultTypeOrmModule: DynamicModule;
  11. @Module({
  12. imports: [ConfigModule],
  13. providers: [TransactionalConnection, TransactionSubscriber, TransactionWrapper],
  14. exports: [TransactionalConnection, TransactionSubscriber, TransactionWrapper],
  15. })
  16. export class ConnectionModule {
  17. static forRoot(): DynamicModule {
  18. if (!defaultTypeOrmModule) {
  19. defaultTypeOrmModule = TypeOrmModule.forRootAsync({
  20. imports: [ConfigModule],
  21. useFactory: (configService: ConfigService) => {
  22. const { dbConnectionOptions } = configService;
  23. const logger = ConnectionModule.getTypeOrmLogger(dbConnectionOptions);
  24. return {
  25. ...dbConnectionOptions,
  26. logger,
  27. };
  28. },
  29. inject: [ConfigService],
  30. });
  31. }
  32. return {
  33. module: ConnectionModule,
  34. imports: [defaultTypeOrmModule],
  35. };
  36. }
  37. static forPlugin(): DynamicModule {
  38. return {
  39. module: ConnectionModule,
  40. imports: [TypeOrmModule.forFeature()],
  41. };
  42. }
  43. static getTypeOrmLogger(dbConnectionOptions: DataSourceOptions) {
  44. if (!dbConnectionOptions.logger) {
  45. return new TypeOrmLogger(dbConnectionOptions.logging);
  46. } else {
  47. return dbConnectionOptions.logger;
  48. }
  49. }
  50. }