Browse Source

refactor(core): Extract TransactionalConnection into own module

Michael Bromley 4 years ago
parent
commit
f178276cd3
69 changed files with 189 additions and 165 deletions
  1. 1 1
      packages/core/e2e/lifecycle.e2e-spec.ts
  2. 4 2
      packages/core/src/api/api-internal-modules.ts
  3. 3 1
      packages/core/src/api/api.module.ts
  4. 1 1
      packages/core/src/api/common/custom-field-relation-resolver.service.ts
  5. 2 2
      packages/core/src/api/config/configure-graphql-module.ts
  6. 1 1
      packages/core/src/api/middleware/transaction-interceptor.ts
  7. 1 1
      packages/core/src/app.module.ts
  8. 1 1
      packages/core/src/config/auth/native-authentication-strategy.ts
  9. 1 1
      packages/core/src/config/promotion/actions/facet-values-percentage-discount-action.ts
  10. 1 1
      packages/core/src/config/promotion/conditions/has-facet-values-condition.ts
  11. 1 1
      packages/core/src/config/promotion/utils/facet-value-checker.ts
  12. 54 0
      packages/core/src/connection/connection.module.ts
  13. 3 0
      packages/core/src/connection/index.ts
  14. 7 5
      packages/core/src/connection/transactional-connection.ts
  15. 2 1
      packages/core/src/data-import/data-import.module.ts
  16. 1 1
      packages/core/src/data-import/providers/importer/fast-importer.service.ts
  17. 1 0
      packages/core/src/event-bus/event-bus.ts
  18. 1 0
      packages/core/src/index.ts
  19. 3 3
      packages/core/src/plugin/default-search-plugin/fulltext-search.service.ts
  20. 3 3
      packages/core/src/plugin/default-search-plugin/indexer/indexer.controller.ts
  21. 8 10
      packages/core/src/plugin/default-search-plugin/search-strategy/mysql-search-strategy.ts
  22. 8 10
      packages/core/src/plugin/default-search-plugin/search-strategy/postgres-search-strategy.ts
  23. 8 10
      packages/core/src/plugin/default-search-plugin/search-strategy/sqlite-search-strategy.ts
  24. 5 2
      packages/core/src/plugin/plugin-common.module.ts
  25. 1 1
      packages/core/src/service/helpers/active-order/active-order.service.ts
  26. 1 1
      packages/core/src/service/helpers/custom-field-relation/custom-field-relation.service.ts
  27. 1 1
      packages/core/src/service/helpers/external-authentication/external-authentication.service.ts
  28. 1 1
      packages/core/src/service/helpers/list-query-builder/list-query-builder.ts
  29. 1 1
      packages/core/src/service/helpers/locale-string-hydrator/locale-string-hydrator.ts
  30. 1 1
      packages/core/src/service/helpers/order-modifier/order-modifier.ts
  31. 1 1
      packages/core/src/service/helpers/order-state-machine/order-state-machine.ts
  32. 1 1
      packages/core/src/service/helpers/slug-validator/slug-validator.ts
  33. 1 1
      packages/core/src/service/helpers/translatable-saver/translatable-saver.ts
  34. 1 1
      packages/core/src/service/helpers/translatable-saver/translation-differ.ts
  35. 1 1
      packages/core/src/service/index.ts
  36. 1 1
      packages/core/src/service/initializer.service.ts
  37. 4 47
      packages/core/src/service/service.module.ts
  38. 1 1
      packages/core/src/service/services/administrator.service.ts
  39. 1 1
      packages/core/src/service/services/asset.service.ts
  40. 1 1
      packages/core/src/service/services/auth.service.ts
  41. 1 1
      packages/core/src/service/services/channel.service.ts
  42. 17 15
      packages/core/src/service/services/collection.service.ts
  43. 1 1
      packages/core/src/service/services/country.service.ts
  44. 1 1
      packages/core/src/service/services/customer-group.service.ts
  45. 1 1
      packages/core/src/service/services/customer.service.ts
  46. 1 1
      packages/core/src/service/services/facet-value.service.ts
  47. 1 1
      packages/core/src/service/services/facet.service.ts
  48. 1 1
      packages/core/src/service/services/fulfillment.service.ts
  49. 1 1
      packages/core/src/service/services/global-settings.service.ts
  50. 3 3
      packages/core/src/service/services/history.service.ts
  51. 1 1
      packages/core/src/service/services/order-testing.service.ts
  52. 1 1
      packages/core/src/service/services/order.service.ts
  53. 1 1
      packages/core/src/service/services/payment-method.service.ts
  54. 1 1
      packages/core/src/service/services/payment.service.ts
  55. 1 1
      packages/core/src/service/services/product-option-group.service.ts
  56. 1 1
      packages/core/src/service/services/product-option.service.ts
  57. 1 1
      packages/core/src/service/services/product-variant.service.ts
  58. 1 1
      packages/core/src/service/services/product.service.ts
  59. 1 1
      packages/core/src/service/services/promotion.service.ts
  60. 1 1
      packages/core/src/service/services/role.service.ts
  61. 1 1
      packages/core/src/service/services/session.service.ts
  62. 1 1
      packages/core/src/service/services/shipping-method.service.ts
  63. 1 1
      packages/core/src/service/services/stock-movement.service.ts
  64. 1 1
      packages/core/src/service/services/tag.service.ts
  65. 1 1
      packages/core/src/service/services/tax-category.service.ts
  66. 1 1
      packages/core/src/service/services/tax-rate.service.ts
  67. 1 1
      packages/core/src/service/services/user.service.ts
  68. 1 1
      packages/core/src/service/services/zone.service.ts
  69. 3 1
      packages/core/src/worker/worker.module.ts

+ 1 - 1
packages/core/e2e/lifecycle.e2e-spec.ts

@@ -10,7 +10,7 @@ import path from 'path';
 
 import { initialData } from '../../../e2e-common/e2e-initial-data';
 import { testConfig, TEST_SETUP_TIMEOUT_MS } from '../../../e2e-common/test-config';
-import { TransactionalConnection } from '../src/service/transaction/transactional-connection';
+import { TransactionalConnection } from '../src/connection/transactional-connection';
 
 const strategyInitSpy = jest.fn();
 const strategyDestroySpy = jest.fn();

+ 4 - 2
packages/core/src/api/api-internal-modules.ts

@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
 
 import { CacheModule } from '../cache/cache.module';
 import { ConfigModule } from '../config/config.module';
+import { ConnectionModule } from '../connection/connection.module';
 import { DataImportModule } from '../data-import/data-import.module';
 import { JobQueueModule } from '../job-queue/job-queue.module';
 import { createDynamicGraphQlModulesForPlugins } from '../plugin/dynamic-plugin-api.module';
@@ -153,7 +154,7 @@ export const adminEntityResolvers = [
  * one API module.
  */
 @Module({
-    imports: [ConfigModule, ServiceModule.forRoot(), CacheModule],
+    imports: [ConfigModule, ServiceModule, CacheModule, ConnectionModule.forRoot()],
     providers: [IdCodecService, ConfigurableOperationCodec, CustomFieldRelationResolverService],
     exports: [
         IdCodecService,
@@ -161,7 +162,8 @@ export const adminEntityResolvers = [
         ConfigModule,
         ConfigurableOperationCodec,
         CustomFieldRelationResolverService,
-        ServiceModule.forRoot(),
+        ServiceModule,
+        ConnectionModule.forRoot(),
     ],
 })
 export class ApiSharedModule {}

+ 3 - 1
packages/core/src/api/api.module.ts

@@ -4,6 +4,7 @@ import { graphqlUploadExpress } from 'graphql-upload';
 import path from 'path';
 
 import { ConfigService } from '../config/config.service';
+import { ConnectionModule } from '../connection/connection.module';
 import { DataImportModule } from '../data-import/data-import.module';
 import { I18nModule } from '../i18n/i18n.module';
 import { ServiceModule } from '../service/service.module';
@@ -24,7 +25,8 @@ import { ValidateCustomFieldsInterceptor } from './middleware/validate-custom-fi
  */
 @Module({
     imports: [
-        ServiceModule.forRoot(),
+        ServiceModule,
+        ConnectionModule.forRoot(),
         DataImportModule,
         I18nModule,
         ApiSharedModule,

+ 1 - 1
packages/core/src/api/common/custom-field-relation-resolver.service.ts

@@ -5,11 +5,11 @@ import { FindOptionsUtils } from 'typeorm/find-options/FindOptionsUtils';
 import { Translatable } from '../../common/types/locale-types';
 import { ConfigService } from '../../config/config.service';
 import { RelationCustomFieldConfig } from '../../config/custom-field/custom-field-types';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { VendureEntity } from '../../entity/base/base.entity';
 import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 import { translateDeep } from '../../service/helpers/utils/translate-entity';
 import { ProductVariantService } from '../../service/services/product-variant.service';
-import { TransactionalConnection } from '../../service/transaction/transactional-connection';
 
 import { RequestContext } from './request-context';
 

+ 2 - 2
packages/core/src/api/config/configure-graphql-module.ts

@@ -7,6 +7,7 @@ import path from 'path';
 
 import { ConfigModule } from '../../config/config.module';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { I18nModule } from '../../i18n/i18n.module';
 import { I18nService } from '../../i18n/i18n.service';
 import { getDynamicGraphQlModulesForPlugins } from '../../plugin/dynamic-plugin-api.module';
@@ -14,7 +15,6 @@ import { getPluginAPIExtensions } from '../../plugin/plugin-metadata';
 import { CustomFieldRelationService } from '../../service/helpers/custom-field-relation/custom-field-relation.service';
 import { ServiceModule } from '../../service/service.module';
 import { ProductVariantService } from '../../service/services/product-variant.service';
-import { TransactionalConnection } from '../../service/transaction/transactional-connection';
 import { ApiSharedModule } from '../api-internal-modules';
 import { CustomFieldRelationResolverService } from '../common/custom-field-relation-resolver.service';
 import { IdCodecService } from '../common/id-codec.service';
@@ -77,7 +77,7 @@ export function configureGraphQLModule(
             GraphQLTypesLoader,
             CustomFieldRelationResolverService,
         ],
-        imports: [ConfigModule, I18nModule, ApiSharedModule, ServiceModule.forRoot()],
+        imports: [ConfigModule, I18nModule, ApiSharedModule, ServiceModule],
     });
 }
 

+ 1 - 1
packages/core/src/api/middleware/transaction-interceptor.ts

@@ -6,7 +6,7 @@ import { QueryRunner } from 'typeorm';
 import { TransactionAlreadyStartedError } from 'typeorm/error/TransactionAlreadyStartedError';
 
 import { REQUEST_CONTEXT_KEY, TRANSACTION_MANAGER_KEY } from '../../common/constants';
-import { TransactionalConnection } from '../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { parseContext } from '../common/parse-context';
 import { RequestContext } from '../common/request-context';
 import { TransactionMode, TRANSACTION_MODE_METADATA_KEY } from '../decorators/transaction.decorator';

+ 1 - 1
packages/core/src/app.module.ts

@@ -20,7 +20,7 @@ import { ServiceModule } from './service/service.module';
         ApiModule,
         PluginModule.forRoot(),
         HealthCheckModule,
-        ServiceModule.forRoot(),
+        ServiceModule,
     ],
 })
 export class AppModule implements NestModule, OnApplicationShutdown {

+ 1 - 1
packages/core/src/config/auth/native-authentication-strategy.ts

@@ -5,10 +5,10 @@ import gql from 'graphql-tag';
 import { RequestContext } from '../../api/common/request-context';
 import { UnauthorizedError } from '../../common/error/errors';
 import { Injector } from '../../common/injector';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { NativeAuthenticationMethod } from '../../entity/authentication-method/native-authentication-method.entity';
 import { User } from '../../entity/user/user.entity';
 import { PasswordCipher } from '../../service/helpers/password-cipher/password-cipher';
-import { TransactionalConnection } from '../../service/transaction/transactional-connection';
 
 import { AuthenticationStrategy } from './authentication-strategy';
 

+ 1 - 1
packages/core/src/config/promotion/actions/facet-values-percentage-discount-action.ts

@@ -1,6 +1,6 @@
 import { LanguageCode } from '@vendure/common/lib/generated-types';
 
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { PromotionItemAction } from '../promotion-action';
 import { FacetValueChecker } from '../utils/facet-value-checker';
 

+ 1 - 1
packages/core/src/config/promotion/conditions/has-facet-values-condition.ts

@@ -1,6 +1,6 @@
 import { LanguageCode } from '@vendure/common/lib/generated-types';
 
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { PromotionCondition } from '../promotion-condition';
 import { FacetValueChecker } from '../utils/facet-value-checker';
 

+ 1 - 1
packages/core/src/config/promotion/utils/facet-value-checker.ts

@@ -3,9 +3,9 @@ import { unique } from '@vendure/common/lib/unique';
 
 import { TtlCache } from '../../../common/ttl-cache';
 import { idsAreEqual } from '../../../common/utils';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { OrderLine } from '../../../entity/order-line/order-line.entity';
 import { ProductVariant } from '../../../entity/product-variant/product-variant.entity';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
 
 /**
  * @description

+ 54 - 0
packages/core/src/connection/connection.module.ts

@@ -0,0 +1,54 @@
+import { DynamicModule, Module } from '@nestjs/common';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { ConnectionOptions } from 'typeorm';
+
+import { ConfigModule } from '../config/config.module';
+import { ConfigService } from '../config/config.service';
+import { TypeOrmLogger } from '../config/logger/typeorm-logger';
+
+import { TransactionalConnection } from './transactional-connection';
+
+let defaultTypeOrmModule: DynamicModule;
+
+@Module({
+    imports: [],
+    providers: [TransactionalConnection],
+    exports: [TransactionalConnection],
+})
+export class ConnectionModule {
+    static forRoot(): DynamicModule {
+        if (!defaultTypeOrmModule) {
+            defaultTypeOrmModule = TypeOrmModule.forRootAsync({
+                imports: [ConfigModule],
+                useFactory: (configService: ConfigService) => {
+                    const { dbConnectionOptions } = configService;
+                    const logger = ConnectionModule.getTypeOrmLogger(dbConnectionOptions);
+                    return {
+                        ...dbConnectionOptions,
+                        logger,
+                    };
+                },
+                inject: [ConfigService],
+            });
+        }
+        return {
+            module: ConnectionModule,
+            imports: [defaultTypeOrmModule],
+        };
+    }
+
+    static forPlugin(): DynamicModule {
+        return {
+            module: ConnectionModule,
+            imports: [TypeOrmModule.forFeature()],
+        };
+    }
+
+    static getTypeOrmLogger(dbConnectionOptions: ConnectionOptions) {
+        if (!dbConnectionOptions.logger) {
+            return new TypeOrmLogger(dbConnectionOptions.logging);
+        } else {
+            return dbConnectionOptions.logger;
+        }
+    }
+}

+ 3 - 0
packages/core/src/connection/index.ts

@@ -0,0 +1,3 @@
+export * from './transactional-connection';
+export * from './transaction-subscriber';
+export * from './connection.module';

+ 7 - 5
packages/core/src/service/transaction/transactional-connection.ts → packages/core/src/connection/transactional-connection.ts

@@ -12,11 +12,13 @@ import {
     Repository,
 } from 'typeorm';
 
-import { RequestContext } from '../../api/common/request-context';
-import { TRANSACTION_MANAGER_KEY } from '../../common/constants';
-import { EntityNotFoundError } from '../../common/error/errors';
-import { ChannelAware, SoftDeletable } from '../../common/types/common-types';
-import { VendureEntity } from '../../entity/base/base.entity';
+import { RequestContext } from '../api/common/request-context';
+import { TRANSACTION_MANAGER_KEY } from '../common/constants';
+import { EntityNotFoundError } from '../common/error/errors';
+import { ChannelAware, SoftDeletable } from '../common/types/common-types';
+import { VendureEntity } from '../entity/base/base.entity';
+
+import { TransactionSubscriber } from './transaction-subscriber';
 
 /**
  * @description

+ 2 - 1
packages/core/src/data-import/data-import.module.ts

@@ -1,6 +1,7 @@
 import { Module } from '@nestjs/common';
 
 import { ConfigModule } from '../config/config.module';
+import { ConnectionModule } from '../connection/connection.module';
 import { PluginModule } from '../plugin/plugin.module';
 import { ServiceModule } from '../service/service.module';
 
@@ -14,7 +15,7 @@ import { Populator } from './providers/populator/populator';
     // Important! PluginModule must be defined before ServiceModule
     // in order that overrides of Services (e.g. SearchService) are correctly
     // registered with the injector.
-    imports: [PluginModule.forRoot(), ServiceModule.forRoot(), ConfigModule],
+    imports: [PluginModule.forRoot(), ServiceModule, ConnectionModule.forRoot(), ConfigModule],
     exports: [ImportParser, Importer, Populator, FastImporterService, AssetImporter],
     providers: [ImportParser, Importer, Populator, FastImporterService, AssetImporter],
 })

+ 1 - 1
packages/core/src/data-import/providers/importer/fast-importer.service.ts

@@ -8,6 +8,7 @@ import {
 import { ID } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../../api/common/request-context';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { Channel } from '../../../entity/channel/channel.entity';
 import { ProductOptionGroupTranslation } from '../../../entity/product-option-group/product-option-group-translation.entity';
 import { ProductOptionGroup } from '../../../entity/product-option-group/product-option-group.entity';
@@ -23,7 +24,6 @@ import { Product } from '../../../entity/product/product.entity';
 import { TranslatableSaver } from '../../../service/helpers/translatable-saver/translatable-saver';
 import { ChannelService } from '../../../service/services/channel.service';
 import { StockMovementService } from '../../../service/services/stock-movement.service';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
 
 /**
  * A service to import entities into the database. This replaces the regular `create` methods of the service layer with faster

+ 1 - 0
packages/core/src/event-bus/event-bus.ts

@@ -2,6 +2,7 @@ import { Injectable, OnModuleDestroy } from '@nestjs/common';
 import { Type } from '@vendure/common/lib/shared-types';
 import { Observable, Subject } from 'rxjs';
 import { filter, takeUntil } from 'rxjs/operators';
+import { EntityManager } from 'typeorm';
 
 import { RequestContext } from '../api/common/request-context';
 import { TRANSACTION_MANAGER_KEY } from '../common/constants';

+ 1 - 0
packages/core/src/index.ts

@@ -3,6 +3,7 @@ export { generateMigration, revertLastMigration, runMigrations } from './migrate
 export * from './api/index';
 export * from './common/index';
 export * from './config/index';
+export * from './connection/index';
 export * from './event-bus/index';
 export * from './health-check/index';
 export * from './job-queue/index';

+ 3 - 3
packages/core/src/plugin/default-search-plugin/fulltext-search.service.ts

@@ -4,14 +4,14 @@ import { Omit } from '@vendure/common/lib/omit';
 
 import { RequestContext } from '../../api/common/request-context';
 import { InternalServerError } from '../../common/error/errors';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Collection, FacetValue } from '../../entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { Job } from '../../job-queue/job';
-import { FacetValueService } from '../../service/services/facet-value.service';
 import { CollectionService } from '../../service/services/collection.service';
+import { FacetValueService } from '../../service/services/facet-value.service';
 import { ProductVariantService } from '../../service/services/product-variant.service';
 import { SearchService } from '../../service/services/search.service';
-import { TransactionalConnection } from '../../service/transaction/transactional-connection';
 
 import { SearchIndexService } from './indexer/search-index.service';
 import { MysqlSearchStrategy } from './search-strategy/mysql-search-strategy';
@@ -48,7 +48,7 @@ export class FulltextSearchService {
         ctx: RequestContext,
         input: SearchInput,
         enabledOnly: boolean = false,
-    ): Promise<Omit<Omit<SearchResponse, 'facetValues'>,'collections'>> {
+    ): Promise<Omit<Omit<SearchResponse, 'facetValues'>, 'collections'>> {
         const items = await this.searchStrategy.getSearchResults(ctx, input, enabledOnly);
         const totalItems = await this.searchStrategy.getTotalCount(ctx, input, enabledOnly);
         return {

+ 3 - 3
packages/core/src/plugin/default-search-plugin/indexer/indexer.controller.ts

@@ -11,12 +11,12 @@ import { Translatable, Translation } from '../../../common/types/locale-types';
 import { asyncObservable, idsAreEqual } from '../../../common/utils';
 import { ConfigService } from '../../../config/config.service';
 import { Logger } from '../../../config/logger/vendure-logger';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { FacetValue } from '../../../entity/facet-value/facet-value.entity';
 import { ProductVariantTranslation } from '../../../entity/product-variant/product-variant-translation.entity';
 import { ProductVariant } from '../../../entity/product-variant/product-variant.entity';
 import { Product } from '../../../entity/product/product.entity';
 import { ProductVariantService } from '../../../service/services/product-variant.service';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
 import { SearchIndexItem } from '../search-index-item.entity';
 import {
     ProductChannelMessageData,
@@ -431,9 +431,9 @@ export class IndexerController {
         translatable: T,
         languageCode: LanguageCode,
     ): Translation<T> {
-        return ((translatable.translations.find(t => t.languageCode === languageCode) ||
+        return (translatable.translations.find(t => t.languageCode === languageCode) ||
             translatable.translations.find(t => t.languageCode === this.configService.defaultLanguageCode) ||
-            translatable.translations[0]) as unknown) as Translation<T>;
+            translatable.translations[0]) as unknown as Translation<T>;
     }
 
     private getFacetIds(variant: ProductVariant): string[] {

+ 8 - 10
packages/core/src/plugin/default-search-plugin/search-strategy/mysql-search-strategy.ts

@@ -4,12 +4,16 @@ import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 import { RequestContext } from '../../../api/common/request-context';
 import { UserInputError } from '../../../common/error/errors';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { SearchIndexItem } from '../search-index-item.entity';
 
 import { SearchStrategy } from './search-strategy';
 import { fieldsToSelect } from './search-strategy-common';
-import { createCollectionIdCountMap, createFacetIdCountMap, mapToSearchResult } from './search-strategy-utils';
+import {
+    createCollectionIdCountMap,
+    createFacetIdCountMap,
+    mapToSearchResult,
+} from './search-strategy-utils';
 
 /**
  * A weighted fulltext search for MySQL / MariaDB.
@@ -131,14 +135,8 @@ export class MysqlSearchStrategy implements SearchStrategy {
         qb: SelectQueryBuilder<SearchIndexItem>,
         input: SearchInput,
     ): SelectQueryBuilder<SearchIndexItem> {
-        const {
-            term,
-            facetValueFilters,
-            facetValueIds,
-            facetValueOperator,
-            collectionId,
-            collectionSlug,
-        } = input;
+        const { term, facetValueFilters, facetValueIds, facetValueOperator, collectionId, collectionSlug } =
+            input;
 
         if (term && term.length > this.minTermLength) {
             const termScoreQuery = this.connection

+ 8 - 10
packages/core/src/plugin/default-search-plugin/search-strategy/postgres-search-strategy.ts

@@ -4,12 +4,16 @@ import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 import { RequestContext } from '../../../api/common/request-context';
 import { UserInputError } from '../../../common/error/errors';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { SearchIndexItem } from '../search-index-item.entity';
 
 import { SearchStrategy } from './search-strategy';
 import { fieldsToSelect } from './search-strategy-common';
-import { createCollectionIdCountMap, createFacetIdCountMap, mapToSearchResult } from './search-strategy-utils';
+import {
+    createCollectionIdCountMap,
+    createFacetIdCountMap,
+    mapToSearchResult,
+} from './search-strategy-utils';
 
 /**
  * A weighted fulltext search for PostgeSQL.
@@ -134,14 +138,8 @@ export class PostgresSearchStrategy implements SearchStrategy {
         input: SearchInput,
         forceGroup: boolean = false,
     ): SelectQueryBuilder<SearchIndexItem> {
-        const {
-            term,
-            facetValueFilters,
-            facetValueIds,
-            facetValueOperator,
-            collectionId,
-            collectionSlug,
-        } = input;
+        const { term, facetValueFilters, facetValueIds, facetValueOperator, collectionId, collectionSlug } =
+            input;
         // join multiple words with the logical AND operator
         const termLogicalAnd = term ? term.trim().replace(/\s+/g, ' & ') : '';
 

+ 8 - 10
packages/core/src/plugin/default-search-plugin/search-strategy/sqlite-search-strategy.ts

@@ -4,11 +4,15 @@ import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 import { RequestContext } from '../../../api/common/request-context';
 import { UserInputError } from '../../../common/error/errors';
-import { TransactionalConnection } from '../../../service/transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { SearchIndexItem } from '../search-index-item.entity';
 
 import { SearchStrategy } from './search-strategy';
-import { createCollectionIdCountMap, createFacetIdCountMap, mapToSearchResult } from './search-strategy-utils';
+import {
+    createCollectionIdCountMap,
+    createFacetIdCountMap,
+    mapToSearchResult,
+} from './search-strategy-utils';
 
 /**
  * A rather naive search for SQLite / SQL.js. Rather than proper
@@ -128,14 +132,8 @@ export class SqliteSearchStrategy implements SearchStrategy {
         qb: SelectQueryBuilder<SearchIndexItem>,
         input: SearchInput,
     ): SelectQueryBuilder<SearchIndexItem> {
-        const {
-            term,
-            facetValueFilters,
-            facetValueIds,
-            facetValueOperator,
-            collectionId,
-            collectionSlug,
-        } = input;
+        const { term, facetValueFilters, facetValueIds, facetValueOperator, collectionId, collectionSlug } =
+            input;
 
         qb.where('1 = 1');
         if (term && term.length > this.minTermLength) {

+ 5 - 2
packages/core/src/plugin/plugin-common.module.ts

@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
 
 import { CacheModule } from '../cache/cache.module';
 import { ConfigModule } from '../config/config.module';
+import { ConnectionModule } from '../connection/connection.module';
 import { EventBusModule } from '../event-bus/event-bus.module';
 import { HealthCheckModule } from '../health-check/health-check.module';
 import { I18nModule } from '../i18n/i18n.module';
@@ -29,7 +30,8 @@ import { ServiceModule } from '../service/service.module';
     imports: [
         EventBusModule,
         ConfigModule,
-        ServiceModule.forPlugin(),
+        ConnectionModule.forPlugin(),
+        ServiceModule,
         JobQueueModule,
         HealthCheckModule,
         CacheModule,
@@ -39,7 +41,8 @@ import { ServiceModule } from '../service/service.module';
     exports: [
         EventBusModule,
         ConfigModule,
-        ServiceModule.forPlugin(),
+        ConnectionModule.forPlugin(),
+        ServiceModule,
         JobQueueModule,
         HealthCheckModule,
         CacheModule,

+ 1 - 1
packages/core/src/service/helpers/active-order/active-order.service.ts

@@ -2,10 +2,10 @@ import { Injectable } from '@nestjs/common';
 
 import { RequestContext } from '../../../api/common/request-context';
 import { InternalServerError } from '../../../common/error/errors';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { Order } from '../../../entity/order/order.entity';
 import { OrderService } from '../../services/order.service';
 import { SessionService } from '../../services/session.service';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 
 @Injectable()
 export class ActiveOrderService {

+ 1 - 1
packages/core/src/service/helpers/custom-field-relation/custom-field-relation.service.ts

@@ -11,8 +11,8 @@ import {
     HasCustomFields,
     RelationCustomFieldConfig,
 } from '../../../config/custom-field/custom-field-types';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 
 @Injectable()
 export class CustomFieldRelationService {

+ 1 - 1
packages/core/src/service/helpers/external-authentication/external-authentication.service.ts

@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
 import { HistoryEntryType } from '@vendure/common/lib/generated-types';
 
 import { RequestContext } from '../../../api/common/request-context';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { Administrator } from '../../../entity/administrator/administrator.entity';
 import { ExternalAuthenticationMethod } from '../../../entity/authentication-method/external-authentication-method.entity';
 import { Customer } from '../../../entity/customer/customer.entity';
@@ -12,7 +13,6 @@ import { ChannelService } from '../../services/channel.service';
 import { CustomerService } from '../../services/customer.service';
 import { HistoryService } from '../../services/history.service';
 import { RoleService } from '../../services/role.service';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 
 /**
  * @description

+ 1 - 1
packages/core/src/service/helpers/list-query-builder/list-query-builder.ts

@@ -12,8 +12,8 @@ import { UserInputError } from '../../../common/error/errors';
 import { ListQueryOptions } from '../../../common/types/common-types';
 import { ConfigService } from '../../../config/config.service';
 import { Logger } from '../../../config/logger/vendure-logger';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 
 import { getColumnMetadata, getEntityAlias } from './connection-utils';
 import { getCalculatedColumns } from './get-calculated-columns';

+ 1 - 1
packages/core/src/service/helpers/locale-string-hydrator/locale-string-hydrator.ts

@@ -3,9 +3,9 @@ import { Injectable } from '@nestjs/common';
 import { RequestContext } from '../../../api/common/request-context';
 import { RequestContextCacheService } from '../../../cache/request-context-cache.service';
 import { Translatable, TranslatableKeys, Translated } from '../../../common/types/locale-types';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
 import { ProductVariant } from '../../../entity/product-variant/product-variant.entity';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 import { translateDeep } from '../utils/translate-entity';
 
 /**

+ 1 - 1
packages/core/src/service/helpers/order-modifier/order-modifier.ts

@@ -18,6 +18,7 @@ import {
 } from '../../../common/error/generated-graphql-shop-errors';
 import { idsAreEqual } from '../../../common/utils';
 import { ConfigService } from '../../../config/config.service';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { OrderItem } from '../../../entity/order-item/order-item.entity';
 import { OrderLine } from '../../../entity/order-line/order-line.entity';
 import { OrderModification } from '../../../entity/order-modification/order-modification.entity';
@@ -31,7 +32,6 @@ import { CountryService } from '../../services/country.service';
 import { PaymentService } from '../../services/payment.service';
 import { ProductVariantService } from '../../services/product-variant.service';
 import { StockMovementService } from '../../services/stock-movement.service';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 import { CustomFieldRelationService } from '../custom-field-relation/custom-field-relation.service';
 import { OrderCalculator } from '../order-calculator/order-calculator';
 import { patchEntity } from '../utils/patch-entity';

+ 1 - 1
packages/core/src/service/helpers/order-state-machine/order-state-machine.ts

@@ -11,6 +11,7 @@ import { StateMachineConfig, Transitions } from '../../../common/finite-state-ma
 import { validateTransitionDefinition } from '../../../common/finite-state-machine/validate-transition-definition';
 import { awaitPromiseOrObservable } from '../../../common/utils';
 import { ConfigService } from '../../../config/config.service';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { OrderModification } from '../../../entity/order-modification/order-modification.entity';
 import { Order } from '../../../entity/order/order.entity';
 import { Payment } from '../../../entity/payment/payment.entity';
@@ -18,7 +19,6 @@ import { ProductVariant } from '../../../entity/product-variant/product-variant.
 import { HistoryService } from '../../services/history.service';
 import { PromotionService } from '../../services/promotion.service';
 import { StockMovementService } from '../../services/stock-movement.service';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 import {
     orderItemsAreAllCancelled,
     orderItemsAreDelivered,

+ 1 - 1
packages/core/src/service/helpers/slug-validator/slug-validator.ts

@@ -4,9 +4,9 @@ import { normalizeString } from '@vendure/common/lib/normalize-string';
 import { ID, Type } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../../api/common/request-context';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
 import { ProductOptionGroup } from '../../../entity/product-option-group/product-option-group.entity';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 
 export type InputWithSlug = {
     id?: ID | null;

+ 1 - 1
packages/core/src/service/helpers/translatable-saver/translatable-saver.ts

@@ -4,9 +4,9 @@ import { ID, Type } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../../api/common/request-context';
 import { Translatable, TranslatedInput, Translation } from '../../../common/types/locale-types';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
 import { ProductOptionGroup } from '../../../entity/product-option-group/product-option-group.entity';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
 import { patchEntity } from '../utils/patch-entity';
 
 import { TranslationDiffer } from './translation-differ';

+ 1 - 1
packages/core/src/service/helpers/translatable-saver/translation-differ.ts

@@ -4,7 +4,7 @@ import { RequestContext } from '../../../api/common/request-context';
 import { InternalServerError } from '../../../common/error/errors';
 import { Translatable, Translation, TranslationInput } from '../../../common/types/locale-types';
 import { foundIn, not } from '../../../common/utils';
-import { TransactionalConnection } from '../../transaction/transactional-connection';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 
 export type TranslationContructor<T> = new (
     input?: DeepPartial<TranslationInput<T>> | DeepPartial<Translation<T>>,

+ 1 - 1
packages/core/src/service/index.ts

@@ -45,4 +45,4 @@ export * from './services/tax-category.service';
 export * from './services/tax-rate.service';
 export * from './services/user.service';
 export * from './services/zone.service';
-export * from './transaction/transactional-connection';
+export * from '../connection/transactional-connection';

+ 1 - 1
packages/core/src/service/initializer.service.ts

@@ -1,6 +1,7 @@
 import { Injectable } from '@nestjs/common';
 
 import { Logger } from '../config/logger/vendure-logger';
+import { TransactionalConnection } from '../connection/transactional-connection';
 import { Administrator } from '../entity/administrator/administrator.entity';
 
 import { AdministratorService } from './services/administrator.service';
@@ -9,7 +10,6 @@ import { GlobalSettingsService } from './services/global-settings.service';
 import { RoleService } from './services/role.service';
 import { ShippingMethodService } from './services/shipping-method.service';
 import { ZoneService } from './services/zone.service';
-import { TransactionalConnection } from './transaction/transactional-connection';
 
 /**
  * Only used internally to run the various service init methods in the correct

+ 4 - 47
packages/core/src/service/service.module.ts

@@ -1,11 +1,8 @@
-import { DynamicModule, Module } from '@nestjs/common';
-import { TypeOrmModule } from '@nestjs/typeorm';
-import { ConnectionOptions } from 'typeorm';
+import { Module } from '@nestjs/common';
 
 import { CacheModule } from '../cache/cache.module';
 import { ConfigModule } from '../config/config.module';
-import { ConfigService } from '../config/config.service';
-import { TypeOrmLogger } from '../config/logger/typeorm-logger';
+import { ConnectionModule } from '../connection/connection.module';
 import { EventBusModule } from '../event-bus/event-bus.module';
 import { JobQueueModule } from '../job-queue/job-queue.module';
 
@@ -60,7 +57,6 @@ import { TaxCategoryService } from './services/tax-category.service';
 import { TaxRateService } from './services/tax-rate.service';
 import { UserService } from './services/user.service';
 import { ZoneService } from './services/zone.service';
-import { TransactionalConnection } from './transaction/transactional-connection';
 
 const services = [
     AdministratorService,
@@ -113,21 +109,18 @@ const helpers = [
     ConfigArgService,
     SlugValidator,
     ExternalAuthenticationService,
-    TransactionalConnection,
     CustomFieldRelationService,
     LocaleStringHydrator,
     ActiveOrderService,
 ];
 
-let defaultTypeOrmModule: DynamicModule;
-
 /**
  * The ServiceCoreModule is imported internally by the ServiceModule. It is arranged in this way so that
  * there is only a single instance of this module being instantiated, and thus the lifecycle hooks will
  * only run a single time.
  */
 @Module({
-    imports: [ConfigModule, EventBusModule, CacheModule, JobQueueModule],
+    imports: [ConnectionModule, ConfigModule, EventBusModule, CacheModule, JobQueueModule],
     providers: [...services, ...helpers, InitializerService],
     exports: [...services, ...helpers],
 })
@@ -144,40 +137,4 @@ export class ServiceCoreModule {}
     imports: [ServiceCoreModule],
     exports: [ServiceCoreModule],
 })
-export class ServiceModule {
-    static forRoot(): DynamicModule {
-        if (!defaultTypeOrmModule) {
-            defaultTypeOrmModule = TypeOrmModule.forRootAsync({
-                imports: [ConfigModule],
-                useFactory: (configService: ConfigService) => {
-                    const { dbConnectionOptions } = configService;
-                    const logger = ServiceModule.getTypeOrmLogger(dbConnectionOptions);
-                    return {
-                        ...dbConnectionOptions,
-                        logger,
-                    };
-                },
-                inject: [ConfigService],
-            });
-        }
-        return {
-            module: ServiceModule,
-            imports: [defaultTypeOrmModule],
-        };
-    }
-
-    static forPlugin(): DynamicModule {
-        return {
-            module: ServiceModule,
-            imports: [TypeOrmModule.forFeature()],
-        };
-    }
-
-    static getTypeOrmLogger(dbConnectionOptions: ConnectionOptions) {
-        if (!dbConnectionOptions.logger) {
-            return new TypeOrmLogger(dbConnectionOptions.logging);
-        } else {
-            return dbConnectionOptions.logger;
-        }
-    }
-}
+export class ServiceModule {}

+ 1 - 1
packages/core/src/service/services/administrator.service.ts

@@ -10,6 +10,7 @@ import { RequestContext } from '../../api/common/request-context';
 import { EntityNotFoundError } from '../../common/error/errors';
 import { ListQueryOptions } from '../../common/types/common-types';
 import { ConfigService } from '../../config';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Administrator } from '../../entity/administrator/administrator.entity';
 import { NativeAuthenticationMethod } from '../../entity/authentication-method/native-authentication-method.entity';
 import { User } from '../../entity/user/user.entity';
@@ -17,7 +18,6 @@ import { CustomFieldRelationService } from '../helpers/custom-field-relation/cus
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { PasswordCipher } from '../helpers/password-cipher/password-cipher';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { RoleService } from './role.service';
 import { UserService } from './user.service';

+ 1 - 1
packages/core/src/service/services/asset.service.ts

@@ -29,6 +29,7 @@ import { ChannelAware } from '../../common/types/common-types';
 import { getAssetType, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { Logger } from '../../config/logger/vendure-logger';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Asset } from '../../entity/asset/asset.entity';
 import { OrderableAsset } from '../../entity/asset/orderable-asset.entity';
 import { VendureEntity } from '../../entity/base/base.entity';
@@ -41,7 +42,6 @@ import { AssetEvent } from '../../event-bus/events/asset-event';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 import { RoleService } from './role.service';

+ 1 - 1
packages/core/src/service/services/auth.service.ts

@@ -16,13 +16,13 @@ import {
     NATIVE_AUTH_STRATEGY_NAME,
 } from '../../config/auth/native-authentication-strategy';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { AuthenticatedSession } from '../../entity/session/authenticated-session.entity';
 import { User } from '../../entity/user/user.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { AttemptedLoginEvent } from '../../event-bus/events/attempted-login-event';
 import { LoginEvent } from '../../event-bus/events/login-event';
 import { LogoutEvent } from '../../event-bus/events/logout-event';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { SessionService } from './session.service';
 

+ 1 - 1
packages/core/src/service/services/channel.service.ts

@@ -20,6 +20,7 @@ import { createSelfRefreshingCache, SelfRefreshingCache } from '../../common/sel
 import { ChannelAware } from '../../common/types/common-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { VendureEntity } from '../../entity/base/base.entity';
 import { Channel } from '../../entity/channel/channel.entity';
 import { ProductVariantPrice } from '../../entity/product-variant/product-variant-price.entity';
@@ -27,7 +28,6 @@ import { Session } from '../../entity/session/session.entity';
 import { Zone } from '../../entity/zone/zone.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { GlobalSettingsService } from './global-settings.service';
 

+ 17 - 15
packages/core/src/service/services/collection.service.ts

@@ -21,6 +21,7 @@ import { Translated } from '../../common/types/locale-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { Logger } from '../../config/logger/vendure-logger';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { FacetValue } from '../../entity';
 import { CollectionTranslation } from '../../entity/collection/collection-translation.entity';
 import { Collection } from '../../entity/collection/collection.entity';
@@ -38,13 +39,16 @@ import { SlugValidator } from '../helpers/slug-validator/slug-validator';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { moveToIndex } from '../helpers/utils/move-to-index';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { AssetService } from './asset.service';
 import { ChannelService } from './channel.service';
 import { FacetValueService } from './facet-value.service';
 
-type ApplyCollectionFiltersJobData = { ctx: SerializedRequestContext; collectionIds: ID[]; applyToChangedVariantsOnly?: boolean; };
+type ApplyCollectionFiltersJobData = {
+    ctx: SerializedRequestContext;
+    collectionIds: ID[];
+    applyToChangedVariantsOnly?: boolean;
+};
 
 @Injectable()
 export class CollectionService implements OnModuleInit {
@@ -64,8 +68,7 @@ export class CollectionService implements OnModuleInit {
         private slugValidator: SlugValidator,
         private configArgService: ConfigArgService,
         private customFieldRelationService: CustomFieldRelationService,
-    ) {
-    }
+    ) {}
 
     async onModuleInit() {
         const productEvents$ = this.eventBus.ofType(ProductEvent);
@@ -100,7 +103,10 @@ export class CollectionService implements OnModuleInit {
                     }
                     completed++;
                     if (collection) {
-                        const affectedVariantIds = await this.applyCollectionFiltersInternal(collection, job.data.applyToChangedVariantsOnly);
+                        const affectedVariantIds = await this.applyCollectionFiltersInternal(
+                            collection,
+                            job.data.applyToChangedVariantsOnly,
+                        );
                         job.setProgress(Math.ceil((completed / job.data.collectionIds.length) * 100));
                         this.eventBus.publish(
                             new CollectionModificationEvent(ctx, collection, affectedVariantIds),
@@ -441,7 +447,10 @@ export class CollectionService implements OnModuleInit {
      * This param is used when we update collection and collection filters are changed to update all
      * variants (because other attributes of collection can be changed https://github.com/vendure-ecommerce/vendure/issues/1015)
      */
-    private async applyCollectionFiltersInternal(collection: Collection, applyToChangedVariantsOnly = true): Promise<ID[]> {
+    private async applyCollectionFiltersInternal(
+        collection: Collection,
+        applyToChangedVariantsOnly = true,
+    ): Promise<ID[]> {
         const ancestorFilters = await this.getAncestors(collection.id).then(ancestors =>
             ancestors.reduce(
                 (filters, c) => [...filters, ...(c.filters || [])],
@@ -472,17 +481,10 @@ export class CollectionService implements OnModuleInit {
         const postIdsSet = new Set(postIds);
 
         if (applyToChangedVariantsOnly) {
-            return [
-                ...preIds.filter(id => !postIdsSet.has(id)),
-                ...postIds.filter(id => !preIdsSet.has(id)),
-            ];
+            return [...preIds.filter(id => !postIdsSet.has(id)), ...postIds.filter(id => !preIdsSet.has(id))];
         } else {
-            return [
-                ...preIds.filter(id => !postIdsSet.has(id)),
-                ...postIds,
-            ];
+            return [...preIds.filter(id => !postIdsSet.has(id)), ...postIds];
         }
-
     }
 
     /**

+ 1 - 1
packages/core/src/service/services/country.service.ts

@@ -12,13 +12,13 @@ import { UserInputError } from '../../common/error/errors';
 import { ListQueryOptions } from '../../common/types/common-types';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Address } from '../../entity';
 import { CountryTranslation } from '../../entity/country/country-translation.entity';
 import { Country } from '../../entity/country/country.entity';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ZoneService } from './zone.service';
 

+ 1 - 1
packages/core/src/service/services/customer-group.service.ts

@@ -15,13 +15,13 @@ import { ID, PaginatedList } from '@vendure/common/lib/shared-types';
 import { RequestContext } from '../../api/common/request-context';
 import { UserInputError } from '../../common/error/errors';
 import { assertFound, idsAreEqual } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { CustomerGroup } from '../../entity/customer-group/customer-group.entity';
 import { Customer } from '../../entity/customer/customer.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { CustomerGroupEvent } from '../../event-bus/events/customer-group-event';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { HistoryService } from './history.service';
 

+ 1 - 1
packages/core/src/service/services/customer.service.ts

@@ -36,6 +36,7 @@ import { ListQueryOptions } from '../../common/types/common-types';
 import { assertFound, idsAreEqual, normalizeEmailAddress } from '../../common/utils';
 import { NATIVE_AUTH_STRATEGY_NAME } from '../../config/auth/native-authentication-strategy';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Address } from '../../entity/address/address.entity';
 import { NativeAuthenticationMethod } from '../../entity/authentication-method/native-authentication-method.entity';
 import { Channel } from '../../entity/channel/channel.entity';
@@ -55,7 +56,6 @@ import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-build
 import { addressToLine } from '../helpers/utils/address-to-line';
 import { patchEntity } from '../helpers/utils/patch-entity';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 import { CountryService } from './country.service';

+ 1 - 1
packages/core/src/service/services/facet-value.service.ts

@@ -13,6 +13,7 @@ import { RequestContext } from '../../api/common/request-context';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Product, ProductVariant } from '../../entity';
 import { FacetValueTranslation } from '../../entity/facet-value/facet-value-translation.entity';
 import { FacetValue } from '../../entity/facet-value/facet-value.entity';
@@ -20,7 +21,6 @@ import { Facet } from '../../entity/facet/facet.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 

+ 1 - 1
packages/core/src/service/services/facet.service.ts

@@ -14,13 +14,13 @@ import { ListQueryOptions } from '../../common/types/common-types';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { FacetTranslation } from '../../entity/facet/facet-translation.entity';
 import { Facet } from '../../entity/facet/facet.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 import { FacetValueService } from './facet-value.service';

+ 1 - 1
packages/core/src/service/services/fulfillment.service.ts

@@ -11,6 +11,7 @@ import {
 } from '../../common/error/generated-graphql-admin-errors';
 import { OrderStateTransitionError } from '../../common/error/generated-graphql-shop-errors';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
 import { OrderItem } from '../../entity/order-item/order-item.entity';
 import { Order } from '../../entity/order/order.entity';
@@ -19,7 +20,6 @@ import { FulfillmentStateTransitionEvent } from '../../event-bus/events/fulfillm
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { FulfillmentState } from '../helpers/fulfillment-state-machine/fulfillment-state';
 import { FulfillmentStateMachine } from '../helpers/fulfillment-state-machine/fulfillment-state-machine';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class FulfillmentService {

+ 1 - 1
packages/core/src/service/services/global-settings.service.ts

@@ -4,10 +4,10 @@ import { UpdateGlobalSettingsInput } from '@vendure/common/lib/generated-types';
 import { RequestContext } from '../../api/common/request-context';
 import { InternalServerError } from '../../common/error/errors';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { GlobalSettings } from '../../entity/global-settings/global-settings.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class GlobalSettingsService {

+ 3 - 3
packages/core/src/service/services/history.service.ts

@@ -9,6 +9,7 @@ import {
 import { ID, PaginatedList, Type } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../api/common/request-context';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Administrator } from '../../entity/administrator/administrator.entity';
 import { CustomerHistoryEntry } from '../../entity/history-entry/customer-history-entry.entity';
 import { HistoryEntry } from '../../entity/history-entry/history-entry.entity';
@@ -18,7 +19,6 @@ import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-build
 import { OrderState } from '../helpers/order-state-machine/order-state';
 import { PaymentState } from '../helpers/payment-state-machine/payment-state';
 import { RefundState } from '../helpers/refund-state-machine/refund-state';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { AdministratorService } from './administrator.service';
 
@@ -154,7 +154,7 @@ export class HistoryService {
         options?: HistoryEntryListOptions,
     ): Promise<PaginatedList<OrderHistoryEntry>> {
         return this.listQueryBuilder
-            .build((HistoryEntry as any) as Type<OrderHistoryEntry>, options, {
+            .build(HistoryEntry as any as Type<OrderHistoryEntry>, options, {
                 where: {
                     order: { id: orderId } as any,
                     ...(publicOnly ? { isPublic: true } : {}),
@@ -192,7 +192,7 @@ export class HistoryService {
         options?: HistoryEntryListOptions,
     ): Promise<PaginatedList<CustomerHistoryEntry>> {
         return this.listQueryBuilder
-            .build((HistoryEntry as any) as Type<CustomerHistoryEntry>, options, {
+            .build(HistoryEntry as any as Type<CustomerHistoryEntry>, options, {
                 where: {
                     customer: { id: customerId } as any,
                     ...(publicOnly ? { isPublic: true } : {}),

+ 1 - 1
packages/core/src/service/services/order-testing.service.ts

@@ -12,6 +12,7 @@ import { ID } from '@vendure/common/lib/shared-types';
 import { RequestContext } from '../../api/common/request-context';
 import { grossPriceOf, netPriceOf } from '../../common/tax-utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { OrderItem } from '../../entity/order-item/order-item.entity';
 import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { Order } from '../../entity/order/order.entity';
@@ -22,7 +23,6 @@ import { ConfigArgService } from '../helpers/config-arg/config-arg.service';
 import { OrderCalculator } from '../helpers/order-calculator/order-calculator';
 import { ShippingCalculator } from '../helpers/shipping-calculator/shipping-calculator';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ProductVariantService } from './product-variant.service';
 

+ 1 - 1
packages/core/src/service/services/order.service.ts

@@ -72,6 +72,7 @@ import { grossPriceOf, netPriceOf } from '../../common/tax-utils';
 import { ListQueryOptions, PaymentMetadata } from '../../common/types/common-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Customer } from '../../entity/customer/customer.entity';
 import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
 import { HistoryEntry } from '../../entity/history-entry/history-entry.entity';
@@ -110,7 +111,6 @@ import {
 } from '../helpers/utils/order-utils';
 import { patchEntity } from '../helpers/utils/patch-entity';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 import { CountryService } from './country.service';

+ 1 - 1
packages/core/src/service/services/payment-method.service.ts

@@ -18,13 +18,13 @@ import { idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { PaymentMethodEligibilityChecker } from '../../config/payment/payment-method-eligibility-checker';
 import { PaymentMethodHandler } from '../../config/payment/payment-method-handler';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Order } from '../../entity/order/order.entity';
 import { PaymentMethod } from '../../entity/payment-method/payment-method.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { ConfigArgService } from '../helpers/config-arg/config-arg.service';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 

+ 1 - 1
packages/core/src/service/services/payment.service.ts

@@ -18,6 +18,7 @@ import {
 import { IneligiblePaymentMethodError } from '../../common/error/generated-graphql-shop-errors';
 import { PaymentMetadata } from '../../common/types/common-types';
 import { idsAreEqual } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { OrderItem } from '../../entity/order-item/order-item.entity';
 import { Order } from '../../entity/order/order.entity';
 import { Payment } from '../../entity/payment/payment.entity';
@@ -28,7 +29,6 @@ import { RefundStateTransitionEvent } from '../../event-bus/events/refund-state-
 import { PaymentState } from '../helpers/payment-state-machine/payment-state';
 import { PaymentStateMachine } from '../helpers/payment-state-machine/payment-state-machine';
 import { RefundStateMachine } from '../helpers/refund-state-machine/refund-state-machine';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { PaymentMethodService } from './payment-method.service';
 

+ 1 - 1
packages/core/src/service/services/product-option-group.service.ts

@@ -9,12 +9,12 @@ import { FindManyOptions, Like } from 'typeorm';
 import { RequestContext } from '../../api/common/request-context';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { ProductOptionGroupTranslation } from '../../entity/product-option-group/product-option-group-translation.entity';
 import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class ProductOptionGroupService {

+ 1 - 1
packages/core/src/service/services/product-option.service.ts

@@ -9,13 +9,13 @@ import { ID } from '@vendure/common/lib/shared-types';
 import { RequestContext } from '../../api/common/request-context';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
 import { ProductOptionTranslation } from '../../entity/product-option/product-option-translation.entity';
 import { ProductOption } from '../../entity/product-option/product-option.entity';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class ProductOptionService {

+ 1 - 1
packages/core/src/service/services/product-variant.service.ts

@@ -19,6 +19,7 @@ import { ListQueryOptions } from '../../common/types/common-types';
 import { Translated } from '../../common/types/locale-types';
 import { idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import {
     Channel,
     Order,
@@ -40,7 +41,6 @@ import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-build
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { samplesEach } from '../helpers/utils/samples-each';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { AssetService } from './asset.service';
 import { ChannelService } from './channel.service';

+ 1 - 1
packages/core/src/service/services/product.service.ts

@@ -19,6 +19,7 @@ import { ProductOptionInUseError } from '../../common/error/generated-graphql-ad
 import { ListQueryOptions } from '../../common/types/common-types';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Channel } from '../../entity/channel/channel.entity';
 import { FacetValue } from '../../entity/facet-value/facet-value.entity';
 import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
@@ -32,7 +33,6 @@ import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-build
 import { SlugValidator } from '../helpers/slug-validator/slug-validator';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { AssetService } from './asset.service';
 import { ChannelService } from './channel.service';

+ 1 - 1
packages/core/src/service/services/promotion.service.ts

@@ -31,12 +31,12 @@ import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { PromotionAction } from '../../config/promotion/promotion-action';
 import { PromotionCondition } from '../../config/promotion/promotion-condition';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Order } from '../../entity/order/order.entity';
 import { Promotion } from '../../entity/promotion/promotion.entity';
 import { ConfigArgService } from '../helpers/config-arg/config-arg.service';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 

+ 1 - 1
packages/core/src/service/services/role.service.ts

@@ -26,13 +26,13 @@ import {
 import { ListQueryOptions } from '../../common/types/common-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Channel } from '../../entity/channel/channel.entity';
 import { Role } from '../../entity/role/role.entity';
 import { User } from '../../entity/user/user.entity';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { getUserChannelsPermissions } from '../helpers/utils/get-user-channels-permissions';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 

+ 1 - 1
packages/core/src/service/services/session.service.ts

@@ -7,6 +7,7 @@ import { EntitySubscriberInterface, InsertEvent, RemoveEvent, UpdateEvent } from
 import { RequestContext } from '../../api/common/request-context';
 import { ConfigService } from '../../config/config.service';
 import { CachedSession, SessionCacheStrategy } from '../../config/session-cache/session-cache-strategy';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Channel } from '../../entity/channel/channel.entity';
 import { Order } from '../../entity/order/order.entity';
 import { Role } from '../../entity/role/role.entity';
@@ -15,7 +16,6 @@ import { AuthenticatedSession } from '../../entity/session/authenticated-session
 import { Session } from '../../entity/session/session.entity';
 import { User } from '../../entity/user/user.entity';
 import { getUserChannelsPermissions } from '../helpers/utils/get-user-channels-permissions';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { OrderService } from './order.service';
 

+ 1 - 1
packages/core/src/service/services/shipping-method.service.ts

@@ -15,6 +15,7 @@ import { ListQueryOptions } from '../../common/types/common-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { Logger } from '../../config/logger/vendure-logger';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Channel } from '../../entity/channel/channel.entity';
 import { ShippingMethodTranslation } from '../../entity/shipping-method/shipping-method-translation.entity';
 import { ShippingMethod } from '../../entity/shipping-method/shipping-method.entity';
@@ -23,7 +24,6 @@ import { CustomFieldRelationService } from '../helpers/custom-field-relation/cus
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { ChannelService } from './channel.service';
 

+ 1 - 1
packages/core/src/service/services/stock-movement.service.ts

@@ -6,6 +6,7 @@ import { RequestContext } from '../../api/common/request-context';
 import { InternalServerError } from '../../common/error/errors';
 import { ShippingCalculator } from '../../config/shipping-method/shipping-calculator';
 import { ShippingEligibilityChecker } from '../../config/shipping-method/shipping-eligibility-checker';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { OrderItem } from '../../entity/order-item/order-item.entity';
 import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { Order } from '../../entity/order/order.entity';
@@ -20,7 +21,6 @@ import { StockMovement } from '../../entity/stock-movement/stock-movement.entity
 import { EventBus } from '../../event-bus/event-bus';
 import { StockMovementEvent } from '../../event-bus/events/stock-movement-event';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { GlobalSettingsService } from './global-settings.service';
 

+ 1 - 1
packages/core/src/service/services/tag.service.ts

@@ -10,10 +10,10 @@ import { unique } from '@vendure/common/lib/unique';
 
 import { RequestContext } from '../../api/common/request-context';
 import { ListQueryOptions, Taggable } from '../../common/types/common-types';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { VendureEntity } from '../../entity/base/base.entity';
 import { Tag } from '../../entity/tag/tag.entity';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class TagService {

+ 1 - 1
packages/core/src/service/services/tax-category.service.ts

@@ -10,10 +10,10 @@ import { ID } from '@vendure/common/lib/shared-types';
 import { RequestContext } from '../../api/common/request-context';
 import { EntityNotFoundError } from '../../common/error/errors';
 import { assertFound } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { TaxCategory } from '../../entity/tax-category/tax-category.entity';
 import { TaxRate } from '../../entity/tax-rate/tax-rate.entity';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class TaxCategoryService {

+ 1 - 1
packages/core/src/service/services/tax-rate.service.ts

@@ -12,6 +12,7 @@ import { RequestContextCacheService } from '../../cache';
 import { EntityNotFoundError } from '../../common/error/errors';
 import { ListQueryOptions } from '../../common/types/common-types';
 import { assertFound } from '../../common/utils';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { CustomerGroup } from '../../entity/customer-group/customer-group.entity';
 import { TaxCategory } from '../../entity/tax-category/tax-category.entity';
 import { TaxRate } from '../../entity/tax-rate/tax-rate.entity';
@@ -20,7 +21,6 @@ import { EventBus } from '../../event-bus/event-bus';
 import { TaxRateModificationEvent } from '../../event-bus/events/tax-rate-modification-event';
 import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { patchEntity } from '../helpers/utils/patch-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 const activeTaxRatesKey = 'active-tax-rates';
 

+ 1 - 1
packages/core/src/service/services/user.service.ts

@@ -17,11 +17,11 @@ import {
     VerificationTokenInvalidError,
 } from '../../common/error/generated-graphql-shop-errors';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { NativeAuthenticationMethod } from '../../entity/authentication-method/native-authentication-method.entity';
 import { User } from '../../entity/user/user.entity';
 import { PasswordCipher } from '../helpers/password-cipher/password-cipher';
 import { VerificationTokenGenerator } from '../helpers/verification-token-generator/verification-token-generator';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 import { RoleService } from './role.service';
 

+ 1 - 1
packages/core/src/service/services/zone.service.ts

@@ -14,12 +14,12 @@ import { RequestContext } from '../../api/common/request-context';
 import { createSelfRefreshingCache, SelfRefreshingCache } from '../../common/self-refreshing-cache';
 import { assertFound } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
+import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Channel, TaxRate } from '../../entity';
 import { Country } from '../../entity/country/country.entity';
 import { Zone } from '../../entity/zone/zone.entity';
 import { patchEntity } from '../helpers/utils/patch-entity';
 import { translateDeep } from '../helpers/utils/translate-entity';
-import { TransactionalConnection } from '../transaction/transactional-connection';
 
 @Injectable()
 export class ZoneService {

+ 3 - 1
packages/core/src/worker/worker.module.ts

@@ -2,6 +2,7 @@ import { Module, OnApplicationShutdown } from '@nestjs/common';
 
 import { ConfigModule } from '../config/config.module';
 import { Logger } from '../config/logger/vendure-logger';
+import { ConnectionModule } from '../connection/connection.module';
 import { I18nModule } from '../i18n/i18n.module';
 import { PluginModule } from '../plugin/plugin.module';
 import { ProcessContextModule } from '../process-context/process-context.module';
@@ -21,7 +22,8 @@ import { WorkerHealthService } from './worker-health.service';
         ConfigModule,
         I18nModule,
         PluginModule.forRoot(),
-        ServiceModule.forRoot(),
+        ConnectionModule.forRoot(),
+        ServiceModule,
     ],
     providers: [WorkerHealthService],
 })