Răsfoiți Sursa

create initActivityEventListeners

Shun Miyazawa 3 ani în urmă
părinte
comite
44fc662431
1 a modificat fișierele cu 38 adăugiri și 1 ștergeri
  1. 38 1
      packages/app/src/server/service/activity.ts

+ 38 - 1
packages/app/src/server/service/activity.ts

@@ -1,22 +1,59 @@
 import { getModelSafely } from '@growi/core';
 
-import { IActivity } from '~/interfaces/activity';
+import { IActivity, AllSupportedActionToNotifiedType } from '~/interfaces/activity';
+import { IPage } from '~/interfaces/page';
 import Activity from '~/server/models/activity';
 
+import loggerFactory from '../../utils/logger';
 import Crowi from '../crowi';
 
 
+const logger = loggerFactory('growi:service:ActivityService');
+
 type ParameterType = Omit<IActivity, 'createdAt'>
 
 class ActivityService {
 
   crowi!: Crowi;
 
+  activityEvent: any;
+
   inAppNotificationService!: any;
 
   constructor(crowi: Crowi) {
     this.crowi = crowi;
+    this.activityEvent = crowi.event('activity');
     this.inAppNotificationService = crowi.inAppNotificationService;
+
+    this.updateByParameters = this.updateByParameters.bind(this);
+
+    this.initActivityEventListeners();
+  }
+
+  initActivityEventListeners(): void {
+    this.activityEvent.on('update', async(activityId: string, parameters: ParameterType, target?: IPage) => {
+
+      // update activity
+      let activity: IActivity;
+      try {
+        activity = await this.updateByParameters(activityId, parameters);
+      }
+      catch (err) {
+        logger.error('Update activity failed', err);
+        return;
+      }
+
+      // create inAppNotification
+      const shouldNotification = (AllSupportedActionToNotifiedType as ReadonlyArray<string>).includes(activity.action);
+      if (shouldNotification) {
+        try {
+          await this.inAppNotificationService.createInAppNotification(activity, target);
+        }
+        catch (err) {
+          logger.error('Create InAppNotification failed', err);
+        }
+      }
+    });
   }