Yuki Takei 5 лет назад
Родитель
Сommit
1fb2697e4b

+ 18 - 2
src/server/crowi/index.js

@@ -1,5 +1,3 @@
-
-
 const debug = require('debug')('growi:crowi');
 const logger = require('@alias/logger')('growi:crowi');
 const pkg = require('@root/package.json');
@@ -53,6 +51,8 @@ function Crowi(rootdir) {
   this.importService = null;
   this.searchService = null;
   this.socketIoService = null;
+  this.pageService = null;
+  this.syncPageStatusService = null;
   this.cdnResourcesService = new CdnResourcesService();
   this.interceptorManager = new InterceptorManager();
   this.xss = new Xss();
@@ -107,6 +107,8 @@ Crowi.prototype.init = async function() {
     this.setupUserGroup(),
     this.setupExport(),
     this.setupImport(),
+    this.setupPageService(),
+    this.setupSyncPageStatusService(),
   ]);
 
   // globalNotification depends on slack and mailer
@@ -580,4 +582,18 @@ Crowi.prototype.setupImport = async function() {
   }
 };
 
+Crowi.prototype.setupPageService = async function() {
+  const PageEventService = require('../service/page');
+  if (this.pageService == null) {
+    this.pageService = new PageEventService(this);
+  }
+};
+
+Crowi.prototype.setupSyncPageStatusService = async function() {
+  const SyncPageStatusService = require('../service/system-events/sync-page-status');
+  if (this.syncPageStatusService == null) {
+    this.syncPageStatusService = new SyncPageStatusService(this, this.configPubsubService, this.socketIoService);
+  }
+};
+
 module.exports = Crowi;

+ 3 - 36
src/server/routes/page.js

@@ -149,43 +149,10 @@ module.exports = function(crowi, app) {
   const { slackNotificationService, configManager } = crowi;
   const interceptorManager = crowi.getInterceptorManager();
   const globalNotificationService = crowi.getGlobalNotificationService();
+  const pageService = crowi.pageService;
 
   const actions = {};
 
-  // register page events
-
-  const pageEvent = crowi.event('page');
-  // FIXME: with GW-3262
-  // pageEvent.on('create', (page, user, socketClientId) => {
-  //   page = serializeToObj(page); // eslint-disable-line no-param-reassign
-  //   crowi.getIo().sockets.emit('page:create', { page, user, socketClientId });
-  // });
-  // pageEvent.on('update', (page, user, socketClientId) => {
-  //   page = serializeToObj(page); // eslint-disable-line no-param-reassign
-  //   crowi.getIo().sockets.emit('page:update', { page, user, socketClientId });
-  // });
-  // pageEvent.on('delete', (page, user, socketClientId) => {
-  //   page = serializeToObj(page); // eslint-disable-line no-param-reassign
-  //   crowi.getIo().sockets.emit('page:delete', { page, user, socketClientId });
-  // });
-
-
-  function serializeToObj(page) {
-    const returnObj = page.toObject();
-    if (page.revisionHackmdSynced != null && page.revisionHackmdSynced._id != null) {
-      returnObj.revisionHackmdSynced = page.revisionHackmdSynced._id;
-    }
-
-    if (page.lastUpdateUser != null && page.lastUpdateUser instanceof User) {
-      returnObj.lastUpdateUser = page.lastUpdateUser.toObject();
-    }
-    if (page.creator != null && page.creator instanceof User) {
-      returnObj.creator = page.creator.toObject();
-    }
-
-    return returnObj;
-  }
-
   function getPathFromRequest(req) {
     return pathUtils.normalizePath(req.params[0] || '');
   }
@@ -743,7 +710,7 @@ module.exports = function(crowi, app) {
       savedTags = await PageTagRelation.listTagNamesByPage(createdPage.id);
     }
 
-    const result = { page: serializeToObj(createdPage), tags: savedTags };
+    const result = { page: pageService.serializeToObj(createdPage), tags: savedTags };
     res.json(ApiResponse.success(result));
 
     // update scopes for descendants
@@ -872,7 +839,7 @@ module.exports = function(crowi, app) {
       savedTags = await PageTagRelation.listTagNamesByPage(pageId);
     }
 
-    const result = { page: serializeToObj(page), tags: savedTags };
+    const result = { page: pageService.serializeToObj(page), tags: savedTags };
     res.json(ApiResponse.success(result));
 
     // update scopes for descendants

+ 29 - 0
src/server/service/page.js

@@ -0,0 +1,29 @@
+class PageService {
+
+  constructor(crowi) {
+    this.crowi = crowi;
+  }
+
+  serializeToObj(page) {
+    const { User } = this.crowi.models;
+
+    const returnObj = page.toObject();
+
+    // set the ObjectID to revisionHackmdSynced
+    if (page.revisionHackmdSynced != null && page.revisionHackmdSynced._id != null) {
+      returnObj.revisionHackmdSynced = page.revisionHackmdSynced._id;
+    }
+
+    if (page.lastUpdateUser != null && page.lastUpdateUser instanceof User) {
+      returnObj.lastUpdateUser = page.lastUpdateUser.toObject();
+    }
+    if (page.creator != null && page.creator instanceof User) {
+      returnObj.creator = page.creator.toObject();
+    }
+
+    return returnObj;
+  }
+
+}
+
+module.exports = PageService;

+ 42 - 0
src/server/service/system-events/sync-page-status.js

@@ -0,0 +1,42 @@
+const logger = require('@alias/logger')('growi:service:system-events:SyncPageStatusService');
+
+class SyncPageStatusService {
+
+  constructor(crowi, configPubsubService, socketIoService) {
+    this.crowi = crowi;
+    this.configPubsubService = configPubsubService;
+    this.socketIoService = socketIoService;
+
+    this.emitter = crowi.events.page;
+
+    this.init();
+  }
+
+  init() {
+    const { socketIoService } = this;
+    const { pageService } = this.crowi;
+
+    // register events
+    this.emitter.on('create', (page, user, socketClientId) => {
+      logger.debug('\'create\' event emitted.');
+
+      page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
+      socketIoService.getDefaultSocket().emit('page:create', { page, user, socketClientId });
+    });
+    this.emitter.on('update', (page, user, socketClientId) => {
+      logger.debug('\'update\' event emitted.');
+
+      page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
+      socketIoService.getDefaultSocket().emit('page:update', { page, user, socketClientId });
+    });
+    this.emitter.on('delete', (page, user, socketClientId) => {
+      logger.debug('\'delete\' event emitted.');
+
+      page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
+      socketIoService.getDefaultSocket().emit('page:delete', { page, user, socketClientId });
+    });
+  }
+
+}
+
+module.exports = SyncPageStatusService;