kaori 4 лет назад
Родитель
Сommit
1cff0cbbdf

+ 13 - 0
packages/app/src/server/events/activity.ts

@@ -0,0 +1,13 @@
+import { EventEmitter } from 'events';
+import loggerFactory from '../../utils/logger';
+
+const logger = loggerFactory('growi:events:activity');
+
+
+export default class ActivityEvent extends EventEmitter {
+
+  onRemove(action: string, activity: any): void {
+    logger.info('onRemove activity event fired');
+  }
+
+}

+ 20 - 13
packages/app/src/server/models/activity.ts

@@ -8,8 +8,9 @@ import loggerFactory from '../../utils/logger';
 import ActivityDefine from '../util/activityDefine';
 
 import Watcher from './watcher';
-// import { InAppNotification } from './in-app-notification';
-// import activityEvent from '../events/activity';
+import { InAppNotification } from './in-app-notification';
+import InAppNotificationService from '../service/in-app-notification';
+import ActivityEvent from '../events/activity';
 
 const logger = loggerFactory('growi:models:activity');
 
@@ -92,8 +93,10 @@ activitySchema.statics.createByParameters = function(parameters) {
    * @param {object} parameters
    */
 activitySchema.statics.removeByParameters = async function(parameters) {
+  const activityEvent = new ActivityEvent();
   const activity = await this.findOne(parameters);
-  // activityEvent.emit('remove', activity);
+
+  activityEvent.emit('remove', activity);
 
   return this.deleteMany(parameters).exec();
 };
@@ -152,9 +155,11 @@ activitySchema.statics.removeByPageUnlike = function(page, user) {
    * @return {Promise}
    */
 activitySchema.statics.removeByPage = async function(page) {
+  const activityEvent = new ActivityEvent();
   const activities = await this.find({ target: page });
+
   for (const activity of activities) {
-    // activityEvent.emit('remove', activity);
+    activityEvent.emit('remove', activity);
   }
   return this.deleteMany({ target: page }).exec();
 };
@@ -217,15 +222,17 @@ activitySchema.post('save', async(savedActivity: ActivityDocument) => {
 
 // because mongoose's 'remove' hook fired only when remove by a method of Document (not by a Model method)
 // move 'save' hook from mongoose's events to activityEvent if I have a time.
-// activityEvent.on('remove', async(activity: ActivityDocument) => {
-
-//   try {
-//     await InAppNotification.removeActivity(activity);
-//   }
-//   catch (err) {
-//     logger.error(err);
-//   }
-// });
+const activityEvent = new ActivityEvent();
+activityEvent.on('remove', async(activity: ActivityDocument) => {
+  const inAppNotificationService = new InAppNotificationService();
+
+  try {
+    await inAppNotificationService.removeActivity(activity);
+  }
+  catch (err) {
+    logger.error(err);
+  }
+});
 
 const Activity = getOrCreateModel<ActivityDocument, ActivityModel>('Activity', activitySchema);
 export { Activity };

+ 1 - 3
packages/app/src/server/service/in-app-notification.ts

@@ -1,7 +1,7 @@
 import Crowi from '../crowi';
 import { InAppNotification } from '~/server/models/in-app-notification';
 
-class InAppNotificationService {
+export default class InAppNotificationService {
 
   crowi!: any;
 
@@ -47,5 +47,3 @@ class InAppNotificationService {
   };
 
 }
-
-module.exports = InAppNotificationService;