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

Merge pull request #4509 from weseek:imprv/#79077-get-action-usres-with-virtual-method

set actionUsers in inAppNotification model
Yuki Takei 4 лет назад
Родитель
Сommit
34c0036a6c

+ 6 - 4
packages/app/src/server/models/activity.ts

@@ -27,9 +27,9 @@ export interface ActivityDocument extends Document {
   getNotificationTargetUsers(): Promise<any[]>
   getNotificationTargetUsers(): Promise<any[]>
 }
 }
 
 
-export type ActivityModel = Model<ActivityDocument>
-
-
+export interface ActivityModel extends Model<ActivityDocument> {
+  getActionUsersFromActivities(activities: ActivityDocument[]): any[]
+}
 // TODO: add revision id
 // TODO: add revision id
 const activitySchema = new Schema<ActivityDocument, ActivityModel>({
 const activitySchema = new Schema<ActivityDocument, ActivityModel>({
   user: {
   user: {
@@ -96,6 +96,9 @@ activitySchema.methods.getNotificationTargetUsers = async function() {
   return activeNotificationUsers;
   return activeNotificationUsers;
 };
 };
 
 
+activitySchema.statics.getActionUsersFromActivities = function(activities) {
+  return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
+};
 
 
 activitySchema.post('save', async(savedActivity: ActivityDocument) => {
 activitySchema.post('save', async(savedActivity: ActivityDocument) => {
   let targetUsers: Types.ObjectId[] = [];
   let targetUsers: Types.ObjectId[] = [];
@@ -109,5 +112,4 @@ activitySchema.post('save', async(savedActivity: ActivityDocument) => {
   activityEvent.emit('create', targetUsers, savedActivity);
   activityEvent.emit('create', targetUsers, savedActivity);
 });
 });
 
 
-
 export default getOrCreateModel<ActivityDocument, ActivityModel>('Activity', activitySchema);
 export default getOrCreateModel<ActivityDocument, ActivityModel>('Activity', activitySchema);

+ 11 - 2
packages/app/src/server/models/in-app-notification.ts

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

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

@@ -34,10 +34,6 @@ class ActivityService {
     return this.find({ user }).sort({ createdAt: -1 }).exec();
     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;
 module.exports = ActivityService;

+ 0 - 5
packages/app/src/server/service/in-app-notification.ts

@@ -102,11 +102,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> {
   read = async function(user: Types.ObjectId): Promise<void> {
     const query = { user, status: STATUS_UNREAD };
     const query = { user, status: STATUS_UNREAD };
     const parameters = { status: STATUS_UNOPENED };
     const parameters = { status: STATUS_UNOPENED };