connection.module.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 { CustomFieldsValidationSubscriber } from './custom-fields-validation-subscriber';
  8. import { TransactionSubscriber } from './transaction-subscriber';
  9. import { TransactionWrapper } from './transaction-wrapper';
  10. import { TransactionalConnection } from './transactional-connection';
  11. let defaultTypeOrmModule: DynamicModule;
  12. @Module({
  13. imports: [ConfigModule],
  14. providers: [
  15. TransactionalConnection,
  16. TransactionSubscriber,
  17. TransactionWrapper,
  18. CustomFieldsValidationSubscriber,
  19. ],
  20. exports: [
  21. TransactionalConnection,
  22. TransactionSubscriber,
  23. TransactionWrapper,
  24. CustomFieldsValidationSubscriber,
  25. ],
  26. })
  27. export class ConnectionCoreModule {}
  28. @Module({
  29. imports: [ConnectionCoreModule],
  30. exports: [ConnectionCoreModule],
  31. })
  32. export class ConnectionModule {
  33. static forRoot(): DynamicModule {
  34. if (!defaultTypeOrmModule) {
  35. defaultTypeOrmModule = TypeOrmModule.forRootAsync({
  36. imports: [ConfigModule],
  37. useFactory: (configService: ConfigService) => {
  38. const { dbConnectionOptions } = configService;
  39. const logger = ConnectionModule.getTypeOrmLogger(dbConnectionOptions);
  40. return {
  41. ...dbConnectionOptions,
  42. logger,
  43. };
  44. },
  45. inject: [ConfigService],
  46. });
  47. }
  48. return {
  49. module: ConnectionModule,
  50. imports: [defaultTypeOrmModule],
  51. };
  52. }
  53. static forPlugin(): DynamicModule {
  54. return {
  55. module: ConnectionModule,
  56. imports: [TypeOrmModule.forFeature()],
  57. };
  58. }
  59. static getTypeOrmLogger(dbConnectionOptions: DataSourceOptions) {
  60. if (!dbConnectionOptions.logger) {
  61. return new TypeOrmLogger(dbConnectionOptions.logging);
  62. } else {
  63. return dbConnectionOptions.logger;
  64. }
  65. }
  66. }