فهرست منبع

use getAdditionalTargetUsers to add user that started bulk export to notification

Futa Arai 1 سال پیش
والد
کامیت
c3bd717923

+ 5 - 3
apps/app/src/features/page-bulk-export/server/service/page-bulk-export.ts

@@ -15,6 +15,7 @@ import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { AttachmentType, FilePathOnStoragePrefix } from '~/server/interfaces/attachment';
 import type { IAttachmentDocument } from '~/server/models';
 import { Attachment } from '~/server/models';
+import type { ActivityDocument } from '~/server/models/activity';
 import type { PageModel, PageDocument } from '~/server/models/page';
 import Subscription from '~/server/models/subscription';
 import type { IAwsMultipartUploader } from '~/server/service/file-uploader/aws/multipart-upload';
@@ -82,8 +83,8 @@ class PageBulkExportService {
     try {
       await multipartUploader.initUpload();
       pageBulkExportJob = await PageBulkExportJob.create({
-        user: currentUser._id,
-        page: basePage._id,
+        user: currentUser,
+        page: basePage,
         uploadId: multipartUploader.uploadId,
         format: PageBulkExportFormat.markdown,
       });
@@ -241,7 +242,8 @@ class PageBulkExportService {
         username: isPopulated(pageBulkExportJob.user) ? pageBulkExportJob.user.username : '',
       },
     });
-    const preNotify = preNotifyService.generatePreNotify(activity);
+    const getAdditionalTargetUsers = (activity: ActivityDocument) => [activity.user];
+    const preNotify = preNotifyService.generatePreNotify(activity, getAdditionalTargetUsers);
     this.activityEvent.emit('updated', activity, pageBulkExportJob, preNotify);
   }
 

+ 2 - 2
apps/app/src/server/models/activity.ts

@@ -1,4 +1,4 @@
-import type { Ref, IPage } from '@growi/core';
+import type { Ref, IPage, IUser } from '@growi/core';
 import type {
   Types, Document, Model, SortOrder,
 } from 'mongoose';
@@ -25,7 +25,7 @@ const logger = loggerFactory('growi:models:activity');
 
 export interface ActivityDocument extends Document {
   _id: Types.ObjectId
-  user: Types.ObjectId
+  user: Ref<IUser>
   ip: string
   endpoint: string
   targetModel: SupportedTargetModelType

+ 4 - 7
apps/app/src/server/service/pre-notify.ts

@@ -1,9 +1,8 @@
-import type {
-  IPage, IUser, Ref,
+import {
+  getIdForRef,
+  type IPage, type IUser, type Ref,
 } from '@growi/core';
 
-import { SupportedTargetModel } from '~/interfaces/activity';
-
 import type { ActivityDocument } from '../models/activity';
 import Subscription from '../models/subscription';
 import { getModelSafely } from '../util/mongoose-utils';
@@ -40,9 +39,7 @@ class PreNotifyService implements IPreNotifyService {
       const actionUser = activity.user;
       const target = activity.target;
       const subscribedUsers = await Subscription.getSubscription(target as unknown as Ref<IPage>);
-      // If target model is PageBulkExportJob, notify the user who started the job. Otherwise, exclude the activity user from the notification.
-      const notificationUsers = activity.targetModel === SupportedTargetModel.MODEL_PAGE_BULK_EXPORT_JOB ? subscribedUsers
-        : subscribedUsers.filter(item => (item.toString() !== actionUser._id.toString()));
+      const notificationUsers = subscribedUsers.filter(item => (item.toString() !== getIdForRef(actionUser).toString()));
       const activeNotificationUsers = await User.find({
         _id: { $in: notificationUsers },
         status: User.STATUS_ACTIVE,