Quellcode durchsuchen

Merge branch 'feat/notification' into imprv/78991-show-actionUser-images

kaori vor 4 Jahren
Ursprung
Commit
991b3d7afa

+ 1 - 1
packages/app/src/server/models/comment.js

@@ -73,7 +73,7 @@ module.exports = function(crowi) {
       { $set: { comment, isMarkdown } },
     );
 
-    await commentEvent.emit('update', commentData.creator, commentData.page);
+    await commentEvent.emit('update', commentData);
 
     return commentData;
   };

+ 23 - 23
packages/app/src/server/service/comment.ts

@@ -11,12 +11,15 @@ class CommentService {
 
   crowi!: Crowi;
 
+  activityService!: any;
+
   inAppNotificationService!: any;
 
   commentEvent!: any;
 
   constructor(crowi: Crowi) {
     this.crowi = crowi;
+    this.activityService = crowi.activityService;
     this.inAppNotificationService = crowi.inAppNotificationService;
 
     this.commentEvent = crowi.event('comment');
@@ -34,13 +37,7 @@ class CommentService {
         const Page = getModelSafely('Page') || require('../models/page')(this.crowi);
         await Page.updateCommentCount(savedComment.page);
 
-        const savedActivity = await this.createByPageComment(savedComment);
-
-        let targetUsers: Types.ObjectId[] = [];
-        targetUsers = await savedActivity.getNotificationTargetUsers();
-
-        await this.inAppNotificationService.emitSocketIo(targetUsers);
-        await this.inAppNotificationService.upsertByActivity(targetUsers, savedActivity);
+        await this.createAndSendNotifications(savedComment, ActivityDefine.ACTION_COMMENT_CREATE);
       }
       catch (err) {
         logger.error('Error occurred while handling the comment create event:\n', err);
@@ -49,12 +46,15 @@ class CommentService {
     });
 
     // update
-    this.commentEvent.on('update', (userId, pageId) => {
-      this.commentEvent.onUpdate();
+    this.commentEvent.on('update', async(updatedComment) => {
+      try {
+        this.commentEvent.onUpdate();
 
-      // TODO: 79713
-      // const { inAppNotificationService } = this.crowi;
-      // inAppNotificationService.emitSocketIo(userId, pageId);
+        await this.createAndSendNotifications(updatedComment, ActivityDefine.ACTION_COMMENT_UPDATE);
+      }
+      catch (err) {
+        logger.error('Error occurred while handling the comment update event:\n', err);
+      }
     });
 
     // remove
@@ -71,27 +71,27 @@ class CommentService {
     });
   }
 
-  /**
-   * @param {Comment} comment
-   * @return {Promise}
-   */
-  createByPageComment = function(comment) {
-    const { activityService } = this.crowi;
-
-    // TODO: Changing the action name in Create and Update
+  private createAndSendNotifications = async function(comment, actionType) {
 
+    // Create activity
     const parameters = {
       user: comment.creator,
       targetModel: ActivityDefine.MODEL_PAGE,
       target: comment.page,
       eventModel: ActivityDefine.MODEL_COMMENT,
       event: comment._id,
-      action: ActivityDefine.ACTION_COMMENT,
+      action: actionType,
     };
+    const activity = await this.activityService.createByParameters(parameters);
 
-    return activityService.createByParameters(parameters);
-  };
+    // Get user to be notified
+    let targetUsers: Types.ObjectId[] = [];
+    targetUsers = await activity.getNotificationTargetUsers();
 
+    // Create and send notifications
+    await this.inAppNotificationService.upsertByActivity(targetUsers, activity);
+    await this.inAppNotificationService.emitSocketIo(targetUsers);
+  };
 
 }
 

+ 12 - 17
packages/app/src/server/service/page.js

@@ -33,20 +33,14 @@ class PageService {
 
     // update
     this.pageEvent.on('update', async(page, user) => {
-      const { inAppNotificationService } = this.crowi;
 
       this.pageEvent.onUpdate();
 
       try {
-        const savedActivity = await this.createByPageUpdate(page, user);
-        let targetUsers = [];
-        targetUsers = await savedActivity.getNotificationTargetUsers();
-
-        await inAppNotificationService.upsertByActivity(targetUsers, savedActivity);
+        await this.createAndSendNotifications(page, user);
       }
       catch (err) {
         logger.error(err);
-
       }
     });
 
@@ -766,25 +760,26 @@ class PageService {
     }
   }
 
-  /**
-   * @param {Page} page
-   * @param {User} user
-   * @return {Promise}
-   */
-  createByPageUpdate = async function(page, user) {
-    const { activityService } = this.crowi;
+  createAndSendNotifications = async function(page, user) {
 
+    const { activityService, inAppNotificationService } = this.crowi;
+
+    // Create activity
     const parameters = {
       user: user._id,
       targetModel: ActivityDefine.MODEL_PAGE,
       target: page,
       action: ActivityDefine.ACTION_UPDATE,
     };
+    const activity = await activityService.createByParameters(parameters);
 
-    const savedActivity = await activityService.createByParameters(parameters);
-    return savedActivity;
-  };
+    // Get user to be notified
+    const targetUsers = await activity.getNotificationTargetUsers();
 
+    // Create and send notifications
+    await inAppNotificationService.upsertByActivity(targetUsers, activity);
+    await inAppNotificationService.emitSocketIo(targetUsers);
+  };
 
 }
 

+ 6 - 0
packages/app/src/server/util/activityDefine.ts

@@ -6,6 +6,8 @@ const ACTION_COMMENT = 'COMMENT';
 const ACTION_CREATE = 'CREATE'; // Not support yet
 const ACTION_DELETE = 'DELETE'; // Not support yet
 const ACTION_LIKE = 'LIKE'; // Not support yet
+const ACTION_COMMENT_CREATE = 'COMMENT_CREATE';
+const ACTION_COMMENT_UPDATE = 'COMMENT_UPDATE';
 
 const getSupportTargetModelNames = () => {
   return [MODEL_PAGE];
@@ -22,6 +24,8 @@ const getSupportActionNames = () => {
     // ACTION_DELETE,
     ACTION_COMMENT,
     // ACTION_LIKE,
+    ACTION_COMMENT_CREATE,
+    ACTION_COMMENT_UPDATE,
   ];
 };
 
@@ -34,6 +38,8 @@ const activityDefine = {
   ACTION_DELETE, // Not support yet
   ACTION_COMMENT,
   ACTION_LIKE,
+  ACTION_COMMENT_CREATE,
+  ACTION_COMMENT_UPDATE,
 
   getSupportTargetModelNames,
   getSupportEventModelNames,