Просмотр исходного кода

set actionUsers in inAppNotification model

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

+ 8 - 3
packages/app/src/server/models/activity.ts

@@ -22,9 +22,9 @@ export interface ActivityDocument extends Document {
   getNotificationTargetUsers(): Promise<any[]>
 }
 
-export type ActivityModel = Model<ActivityDocument>
-
-
+export interface ActivityModel extends Model<ActivityDocument> {
+  getActionUsersFromActivities(activities: ActivityDocument[]): any[]
+}
 // TODO: add revision id
 const activitySchema = new Schema<ActivityDocument, ActivityModel>({
   user: {
@@ -91,4 +91,9 @@ activitySchema.methods.getNotificationTargetUsers = async function() {
   return activeNotificationUsers;
 };
 
+
+activitySchema.statics.getActionUsersFromActivities = function(activities) {
+  return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
+};
+
 export default getOrCreateModel<ActivityDocument, ActivityModel>('Activity', activitySchema);

+ 7 - 1
packages/app/src/server/models/in-app-notification.ts

@@ -2,8 +2,10 @@ import {
   Types, Document, PaginateModel, Schema, /* , Query */
 } from 'mongoose';
 import mongoosePaginate from 'mongoose-paginate-v2';
+
+import Activity, { ActivityDocument } from './activity';
 import ActivityDefine from '../util/activityDefine';
-import { ActivityDocument } from './activity';
+
 import { getOrCreateModel } from '../util/mongoose-utils';
 import loggerFactory from '../../utils/logger';
 
@@ -79,6 +81,10 @@ const inAppNotificationSchema = new Schema<InAppNotificationDocument, InAppNotif
 });
 inAppNotificationSchema.plugin(mongoosePaginate);
 
+inAppNotificationSchema.virtual('actionUsers').get(function(this: NotificationDocument) {
+  return Activity.getActionUsersFromActivities((this.activities as any) as ActivityDocument[]);
+});
+
 const transform = (doc, ret) => {
   // delete ret.activities
 };

+ 0 - 4
packages/app/src/server/service/activity.ts

@@ -44,10 +44,6 @@ class ActivityService {
     return this.find({ user }).sort({ createdAt: -1 }).exec();
   };
 
-  getActionUsersFromActivities = function(activities) {
-    return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
-  };
-
 }
 
 module.exports = ActivityService;

+ 1 - 0
packages/app/src/server/service/comment.ts

@@ -57,6 +57,7 @@ class CommentService {
       this.commentEvent.onUpdate();
       const { inAppNotificationService } = this.crowi;
 
+
       inAppNotificationService.emitSocketIo(userId, pageId);
     });
 

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

@@ -3,10 +3,10 @@ import { subDays } from 'date-fns';
 import Crowi from '../crowi';
 import {
   InAppNotification, InAppNotificationDocument, STATUS_UNREAD, STATUS_UNOPENED,
-} from '~/server/models/in-app-notification';
-import { ActivityDocument } from '~/server/models/activity';
+} from '../models/in-app-notification';
+import { ActivityDocument } from '../models/activity';
 
-import loggerFactory from '~/utils/logger';
+import loggerFactory from '../../utils/logger';
 import { RoomPrefix, getRoomNameWithId } from '../util/socket-io-helpers';
 
 const logger = loggerFactory('growi:service:inAppNotification');
@@ -104,11 +104,6 @@ export default class InAppNotificationService {
     }
   }
 
-  // inAppNotificationSchema.virtual('actionUsers').get(function(this: InAppNotificationDocument) {
-  //   const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
-  //   return Activity.getActionUsersFromActivities((this.activities as any) as ActivityDocument[]);
-  // });
-
   read = async function(user: Types.ObjectId): Promise<void> {
     const query = { user, status: STATUS_UNREAD };
     const parameters = { status: STATUS_UNOPENED };