service.module.ts 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import { DynamicModule, Module } from '@nestjs/common';
  2. import { TypeOrmModule } from '@nestjs/typeorm';
  3. import { ConnectionOptions } from 'typeorm';
  4. import { CacheModule } from '../cache/cache.module';
  5. import { ConfigModule } from '../config/config.module';
  6. import { ConfigService } from '../config/config.service';
  7. import { TypeOrmLogger } from '../config/logger/typeorm-logger';
  8. import { EventBusModule } from '../event-bus/event-bus.module';
  9. import { JobQueueModule } from '../job-queue/job-queue.module';
  10. import { ActiveOrderService } from './helpers/active-order/active-order.service';
  11. import { ConfigArgService } from './helpers/config-arg/config-arg.service';
  12. import { CustomFieldRelationService } from './helpers/custom-field-relation/custom-field-relation.service';
  13. import { ExternalAuthenticationService } from './helpers/external-authentication/external-authentication.service';
  14. import { FulfillmentStateMachine } from './helpers/fulfillment-state-machine/fulfillment-state-machine';
  15. import { ListQueryBuilder } from './helpers/list-query-builder/list-query-builder';
  16. import { LocaleStringHydrator } from './helpers/locale-string-hydrator/locale-string-hydrator';
  17. import { OrderCalculator } from './helpers/order-calculator/order-calculator';
  18. import { OrderMerger } from './helpers/order-merger/order-merger';
  19. import { OrderModifier } from './helpers/order-modifier/order-modifier';
  20. import { OrderStateMachine } from './helpers/order-state-machine/order-state-machine';
  21. import { PasswordCipher } from './helpers/password-cipher/password-cipher';
  22. import { PaymentStateMachine } from './helpers/payment-state-machine/payment-state-machine';
  23. import { RefundStateMachine } from './helpers/refund-state-machine/refund-state-machine';
  24. import { ShippingCalculator } from './helpers/shipping-calculator/shipping-calculator';
  25. import { SlugValidator } from './helpers/slug-validator/slug-validator';
  26. import { TranslatableSaver } from './helpers/translatable-saver/translatable-saver';
  27. import { VerificationTokenGenerator } from './helpers/verification-token-generator/verification-token-generator';
  28. import { InitializerService } from './initializer.service';
  29. import { AdministratorService } from './services/administrator.service';
  30. import { AssetService } from './services/asset.service';
  31. import { AuthService } from './services/auth.service';
  32. import { ChannelService } from './services/channel.service';
  33. import { CollectionService } from './services/collection.service';
  34. import { CountryService } from './services/country.service';
  35. import { CustomerGroupService } from './services/customer-group.service';
  36. import { CustomerService } from './services/customer.service';
  37. import { FacetValueService } from './services/facet-value.service';
  38. import { FacetService } from './services/facet.service';
  39. import { FulfillmentService } from './services/fulfillment.service';
  40. import { GlobalSettingsService } from './services/global-settings.service';
  41. import { HistoryService } from './services/history.service';
  42. import { OrderTestingService } from './services/order-testing.service';
  43. import { OrderService } from './services/order.service';
  44. import { PaymentMethodService } from './services/payment-method.service';
  45. import { PaymentService } from './services/payment.service';
  46. import { ProductOptionGroupService } from './services/product-option-group.service';
  47. import { ProductOptionService } from './services/product-option.service';
  48. import { ProductVariantService } from './services/product-variant.service';
  49. import { ProductService } from './services/product.service';
  50. import { PromotionService } from './services/promotion.service';
  51. import { RoleService } from './services/role.service';
  52. import { SearchService } from './services/search.service';
  53. import { SessionService } from './services/session.service';
  54. import { ShippingMethodService } from './services/shipping-method.service';
  55. import { StockMovementService } from './services/stock-movement.service';
  56. import { TagService } from './services/tag.service';
  57. import { TaxCategoryService } from './services/tax-category.service';
  58. import { TaxRateService } from './services/tax-rate.service';
  59. import { UserService } from './services/user.service';
  60. import { ZoneService } from './services/zone.service';
  61. import { TransactionalConnection } from './transaction/transactional-connection';
  62. const services = [
  63. AdministratorService,
  64. AssetService,
  65. AuthService,
  66. ChannelService,
  67. CollectionService,
  68. CountryService,
  69. CustomerGroupService,
  70. CustomerService,
  71. FacetService,
  72. FacetValueService,
  73. FulfillmentService,
  74. GlobalSettingsService,
  75. HistoryService,
  76. OrderService,
  77. OrderTestingService,
  78. PaymentService,
  79. PaymentMethodService,
  80. ProductOptionGroupService,
  81. ProductOptionService,
  82. ProductService,
  83. ProductVariantService,
  84. PromotionService,
  85. RoleService,
  86. SearchService,
  87. SessionService,
  88. ShippingMethodService,
  89. StockMovementService,
  90. TagService,
  91. TaxCategoryService,
  92. TaxRateService,
  93. UserService,
  94. ZoneService,
  95. ];
  96. const helpers = [
  97. TranslatableSaver,
  98. PasswordCipher,
  99. OrderCalculator,
  100. OrderStateMachine,
  101. FulfillmentStateMachine,
  102. OrderMerger,
  103. OrderModifier,
  104. PaymentStateMachine,
  105. ListQueryBuilder,
  106. ShippingCalculator,
  107. VerificationTokenGenerator,
  108. RefundStateMachine,
  109. ConfigArgService,
  110. SlugValidator,
  111. ExternalAuthenticationService,
  112. TransactionalConnection,
  113. CustomFieldRelationService,
  114. LocaleStringHydrator,
  115. ActiveOrderService,
  116. ];
  117. let defaultTypeOrmModule: DynamicModule;
  118. /**
  119. * The ServiceCoreModule is imported internally by the ServiceModule. It is arranged in this way so that
  120. * there is only a single instance of this module being instantiated, and thus the lifecycle hooks will
  121. * only run a single time.
  122. */
  123. @Module({
  124. imports: [ConfigModule, EventBusModule, CacheModule, JobQueueModule],
  125. providers: [...services, ...helpers, InitializerService],
  126. exports: [...services, ...helpers],
  127. })
  128. export class ServiceCoreModule {}
  129. /**
  130. * The ServiceModule is responsible for the service layer, i.e. accessing the database
  131. * and implementing the main business logic of the application.
  132. *
  133. * The exported providers are used in the ApiModule, which is responsible for parsing requests
  134. * into a format suitable for the service layer logic.
  135. */
  136. @Module({
  137. imports: [ServiceCoreModule],
  138. exports: [ServiceCoreModule],
  139. })
  140. export class ServiceModule {
  141. static forRoot(): DynamicModule {
  142. if (!defaultTypeOrmModule) {
  143. defaultTypeOrmModule = TypeOrmModule.forRootAsync({
  144. imports: [ConfigModule],
  145. useFactory: (configService: ConfigService) => {
  146. const { dbConnectionOptions } = configService;
  147. const logger = ServiceModule.getTypeOrmLogger(dbConnectionOptions);
  148. return {
  149. ...dbConnectionOptions,
  150. logger,
  151. };
  152. },
  153. inject: [ConfigService],
  154. });
  155. }
  156. return {
  157. module: ServiceModule,
  158. imports: [defaultTypeOrmModule],
  159. };
  160. }
  161. static forPlugin(): DynamicModule {
  162. return {
  163. module: ServiceModule,
  164. imports: [TypeOrmModule.forFeature()],
  165. };
  166. }
  167. static getTypeOrmLogger(dbConnectionOptions: ConnectionOptions) {
  168. if (!dbConnectionOptions.logger) {
  169. return new TypeOrmLogger(dbConnectionOptions.logging);
  170. } else {
  171. return dbConnectionOptions.logger;
  172. }
  173. }
  174. }