Просмотр исходного кода

instanciate export service singleton instance using factory method

Futa Arai 2 лет назад
Родитель
Сommit
660f147d49

+ 3 - 6
apps/app/src/server/crowi/index.js

@@ -25,8 +25,8 @@ import { aclService as aclServiceSingletonInstance } from '../service/acl';
 import AppService from '../service/app';
 import AppService from '../service/app';
 import AttachmentService from '../service/attachment';
 import AttachmentService from '../service/attachment';
 import { configManager as configManagerSingletonInstance } from '../service/config-manager';
 import { configManager as configManagerSingletonInstance } from '../service/config-manager';
-import ExportService from '../service/export';
-import { instanciate as instanciateExternalAccountService } from '../service/external-account';
+import instanciateExportService from '../service/export';
+import instanciateExternalAccountService from '../service/external-account';
 import { FileUploader, getUploader } from '../service/file-uploader'; // eslint-disable-line no-unused-vars
 import { FileUploader, getUploader } from '../service/file-uploader'; // eslint-disable-line no-unused-vars
 import { G2GTransferPusherService, G2GTransferReceiverService } from '../service/g2g-transfer';
 import { G2GTransferPusherService, G2GTransferReceiverService } from '../service/g2g-transfer';
 import GrowiBridgeService from '../service/growi-bridge';
 import GrowiBridgeService from '../service/growi-bridge';
@@ -82,7 +82,6 @@ class Crowi {
     this.fileUploadService = null;
     this.fileUploadService = null;
     this.restQiitaAPIService = null;
     this.restQiitaAPIService = null;
     this.growiBridgeService = null;
     this.growiBridgeService = null;
-    this.exportService = null;
     this.importService = null;
     this.importService = null;
     this.pluginService = null;
     this.pluginService = null;
     this.searchService = null;
     this.searchService = null;
@@ -691,9 +690,7 @@ Crowi.prototype.setUpGrowiBridge = async function() {
 };
 };
 
 
 Crowi.prototype.setupExport = async function() {
 Crowi.prototype.setupExport = async function() {
-  if (this.exportService == null) {
-    this.exportService = new ExportService(this);
-  }
+  instanciateExportService(this);
 };
 };
 
 
 Crowi.prototype.setupImport = async function() {
 Crowi.prototype.setupImport = async function() {

+ 3 - 5
apps/app/src/server/routes/admin.js

@@ -1,15 +1,13 @@
 import { SupportedAction } from '~/interfaces/activity';
 import { SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
+import { configManager } from '../service/config-manager';
+import { exportService } from '../service/export';
+
 const logger = loggerFactory('growi:routes:admin');
 const logger = loggerFactory('growi:routes:admin');
 
 
 /* eslint-disable no-use-before-define */
 /* eslint-disable no-use-before-define */
 module.exports = function(crowi, app) {
 module.exports = function(crowi, app) {
-  const {
-    configManager,
-    exportService,
-  } = crowi;
-
   const ApiResponse = require('../util/apiResponse');
   const ApiResponse = require('../util/apiResponse');
   const importer = require('../util/importer')(crowi);
   const importer = require('../util/importer')(crowi);
 
 

+ 2 - 1
apps/app/src/server/routes/apiv3/export.js

@@ -1,4 +1,5 @@
 import { SupportedAction } from '~/interfaces/activity';
 import { SupportedAction } from '~/interfaces/activity';
+import { exportService } from '~/server/service/export';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import { generateAddActivityMiddleware } from '../../middlewares/add-activity';
 import { generateAddActivityMiddleware } from '../../middlewares/add-activity';
@@ -49,7 +50,7 @@ module.exports = (crowi) => {
   const adminRequired = require('../../middlewares/admin-required')(crowi);
   const adminRequired = require('../../middlewares/admin-required')(crowi);
   const addActivity = generateAddActivityMiddleware(crowi);
   const addActivity = generateAddActivityMiddleware(crowi);
 
 
-  const { exportService, socketIoService } = crowi;
+  const { socketIoService } = crowi;
 
 
   const activityEvent = crowi.event('activity');
   const activityEvent = crowi.event('activity');
   const adminEvent = crowi.event('admin');
   const adminEvent = crowi.event('admin');

+ 2 - 1
apps/app/src/server/routes/apiv3/g2g-transfer.ts

@@ -7,6 +7,7 @@ import { body } from 'express-validator';
 import multer from 'multer';
 import multer from 'multer';
 
 
 import { isG2GTransferError } from '~/server/models/vo/g2g-transfer-error';
 import { isG2GTransferError } from '~/server/models/vo/g2g-transfer-error';
+import { exportService } from '~/server/service/export';
 import { IDataGROWIInfo, X_GROWI_TRANSFER_KEY_HEADER_NAME } from '~/server/service/g2g-transfer';
 import { IDataGROWIInfo, X_GROWI_TRANSFER_KEY_HEADER_NAME } from '~/server/service/g2g-transfer';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 import { TransferKey } from '~/utils/vo/transfer-key';
 import { TransferKey } from '~/utils/vo/transfer-key';
@@ -36,7 +37,7 @@ const validator = {
  */
  */
 module.exports = (crowi: Crowi): Router => {
 module.exports = (crowi: Crowi): Router => {
   const {
   const {
-    g2gTransferPusherService, g2gTransferReceiverService, exportService, importService,
+    g2gTransferPusherService, g2gTransferReceiverService, importService,
     growiBridgeService, configManager,
     growiBridgeService, configManager,
   } = crowi;
   } = crowi;
   if (g2gTransferPusherService == null || g2gTransferReceiverService == null || exportService == null || importService == null
   if (g2gTransferPusherService == null || g2gTransferReceiverService == null || exportService == null || importService == null

+ 2 - 1
apps/app/src/server/routes/apiv3/page.js

@@ -14,6 +14,7 @@ import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
 import { excludeReadOnlyUser } from '~/server/middlewares/exclude-read-only-user';
 import { excludeReadOnlyUser } from '~/server/middlewares/exclude-read-only-user';
 import Subscription from '~/server/models/subscription';
 import Subscription from '~/server/models/subscription';
 import UserGroup from '~/server/models/user-group';
 import UserGroup from '~/server/models/user-group';
+import { exportService } from '~/server/service/export';
 import { preNotifyService } from '~/server/service/pre-notify';
 import { preNotifyService } from '~/server/service/pre-notify';
 import { divideByType } from '~/server/util/granted-group';
 import { divideByType } from '~/server/util/granted-group';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
@@ -176,7 +177,7 @@ module.exports = (crowi) => {
 
 
   const globalNotificationService = crowi.getGlobalNotificationService();
   const globalNotificationService = crowi.getGlobalNotificationService();
   const { Page, GlobalNotificationSetting } = crowi.models;
   const { Page, GlobalNotificationSetting } = crowi.models;
-  const { pageService, exportService } = crowi;
+  const { pageService } = crowi;
 
 
   const activityEvent = crowi.event('activity');
   const activityEvent = crowi.event('activity');
 
 

+ 5 - 1
apps/app/src/server/service/export.ts

@@ -400,4 +400,8 @@ class ExportService {
 
 
 }
 }
 
 
-export default ExportService;
+// eslint-disable-next-line import/no-mutable-exports
+export let exportService: ExportService | undefined; // singleton instance
+export default function instanciate(crowi: any): void {
+  exportService = new ExportService(crowi);
+}

+ 1 - 1
apps/app/src/server/service/external-account.ts

@@ -67,6 +67,6 @@ class ExternalAccountService {
 
 
 // eslint-disable-next-line import/no-mutable-exports
 // eslint-disable-next-line import/no-mutable-exports
 export let externalAccountService: ExternalAccountService | undefined; // singleton instance
 export let externalAccountService: ExternalAccountService | undefined; // singleton instance
-export function instanciate(passportService: PassportService): void {
+export default function instanciate(passportService: PassportService): void {
   externalAccountService = new ExternalAccountService(passportService);
   externalAccountService = new ExternalAccountService(passportService);
 }
 }

+ 2 - 1
apps/app/src/server/service/g2g-transfer.ts

@@ -22,6 +22,7 @@ import { Attachment } from '../models';
 import { G2GTransferError, G2GTransferErrorCode } from '../models/vo/g2g-transfer-error';
 import { G2GTransferError, G2GTransferErrorCode } from '../models/vo/g2g-transfer-error';
 
 
 import { configManager } from './config-manager';
 import { configManager } from './config-manager';
+import { exportService } from './export';
 
 
 const logger = loggerFactory('growi:service:g2g-transfer');
 const logger = loggerFactory('growi:service:g2g-transfer');
 
 
@@ -432,7 +433,7 @@ export class G2GTransferPusherService implements Pusher {
 
 
     let zipFileStream: ReadStream;
     let zipFileStream: ReadStream;
     try {
     try {
-      const zipFileStat = await this.crowi.exportService?.export(collections);
+      const zipFileStat = await exportService?.export(collections);
       const zipFilePath = zipFileStat?.zipFilePath;
       const zipFilePath = zipFileStat?.zipFilePath;
 
 
       if (zipFilePath == null) throw new Error('Failed to generate zip file');
       if (zipFilePath == null) throw new Error('Failed to generate zip file');

+ 2 - 2
apps/app/test/integration/service/external-user-group-sync.test.ts

@@ -9,7 +9,7 @@ import ExternalUserGroupRelation from '../../../src/features/external-user-group
 import ExternalUserGroupSyncService from '../../../src/features/external-user-group/server/service/external-user-group-sync';
 import ExternalUserGroupSyncService from '../../../src/features/external-user-group/server/service/external-user-group-sync';
 import ExternalAccount from '../../../src/server/models/external-account';
 import ExternalAccount from '../../../src/server/models/external-account';
 import { configManager } from '../../../src/server/service/config-manager';
 import { configManager } from '../../../src/server/service/config-manager';
-import { instanciate } from '../../../src/server/service/external-account';
+import instanciateExternalAccountService from '../../../src/server/service/external-account';
 import PassportService from '../../../src/server/service/passport';
 import PassportService from '../../../src/server/service/passport';
 import { getInstance } from '../setup-crowi';
 import { getInstance } from '../setup-crowi';
 
 
@@ -184,7 +184,7 @@ describe('ExternalUserGroupSyncService.syncExternalUserGroups', () => {
     crowi = await getInstance();
     crowi = await getInstance();
     await configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isV5Compatible': true });
     await configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isV5Compatible': true });
     const passportService = new PassportService(crowi);
     const passportService = new PassportService(crowi);
-    instanciate(passportService);
+    instanciateExternalAccountService(passportService);
   });
   });
 
 
   beforeEach(async() => {
   beforeEach(async() => {