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

+ 53 - 59
packages/app/src/server/models/activity.ts

@@ -26,13 +26,7 @@ export interface ActivityDocument extends Document {
   getNotificationTargetUsers(): Promise<any[]>
   getNotificationTargetUsers(): Promise<any[]>
 }
 }
 
 
-export interface ActivityModel extends Model<ActivityDocument> {
-  createByParameters(parameters: any): Promise<ActivityDocument>
-  createByPageComment(comment: any): Promise<ActivityDocument>
-  createByPageLike(page: any, user: any): Promise<ActivityDocument>
-  findByUser(user: any): Promise<ActivityDocument[]>
-  getActionUsersFromActivities(activities: ActivityDocument[]): any[]
-}
+export type ActivityModel = Model<ActivityDocument>
 
 
 module.exports = function(crowi: Crowi) {
 module.exports = function(crowi: Crowi) {
   const activityEvent = crowi.event('activity');
   const activityEvent = crowi.event('activity');
@@ -78,58 +72,58 @@ module.exports = function(crowi: Crowi) {
     user: 1, target: 1, action: 1, createdAt: 1,
     user: 1, target: 1, action: 1, createdAt: 1,
   }, { unique: true });
   }, { unique: true });
 
 
-  /**
-     * @param {object} parameters
-     * @return {Promise}
-     */
-  activitySchema.statics.createByParameters = function(parameters) {
-    return this.create(parameters);
-  };
-
-  /**
-     * @param {Comment} comment
-     * @return {Promise}
-     */
-  activitySchema.statics.createByPageComment = function(comment) {
-    const parameters = {
-      user: comment.creator,
-      targetModel: ActivityDefine.MODEL_PAGE,
-      target: comment.page,
-      eventModel: ActivityDefine.MODEL_COMMENT,
-      event: comment._id,
-      action: ActivityDefine.ACTION_COMMENT,
-    };
-
-    return this.createByParameters(parameters);
-  };
-
-  /**
-     * @param {Page} page
-     * @param {User} user
-     * @return {Promise}
-     */
-  activitySchema.statics.createByPageLike = function(page, user) {
-    const parameters = {
-      user: user._id,
-      targetModel: ActivityDefine.MODEL_PAGE,
-      target: page,
-      action: ActivityDefine.ACTION_LIKE,
-    };
-
-    return this.createByParameters(parameters);
-  };
-
-  /**
-     * @param {User} user
-     * @return {Promise}
-     */
-  activitySchema.statics.findByUser = function(user) {
-    return this.find({ user }).sort({ createdAt: -1 }).exec();
-  };
-
-  activitySchema.statics.getActionUsersFromActivities = function(activities) {
-    return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
-  };
+  // /**
+  //    * @param {object} parameters
+  //    * @return {Promise}
+  //    */
+  // activitySchema.statics.createByParameters = function(parameters) {
+  //   return this.create(parameters);
+  // };
+
+  // /**
+  //    * @param {Comment} comment
+  //    * @return {Promise}
+  //    */
+  // activitySchema.statics.createByPageComment = function(comment) {
+  //   const parameters = {
+  //     user: comment.creator,
+  //     targetModel: ActivityDefine.MODEL_PAGE,
+  //     target: comment.page,
+  //     eventModel: ActivityDefine.MODEL_COMMENT,
+  //     event: comment._id,
+  //     action: ActivityDefine.ACTION_COMMENT,
+  //   };
+
+  //   return this.createByParameters(parameters);
+  // };
+
+  // /**
+  //    * @param {Page} page
+  //    * @param {User} user
+  //    * @return {Promise}
+  //    */
+  // activitySchema.statics.createByPageLike = function(page, user) {
+  //   const parameters = {
+  //     user: user._id,
+  //     targetModel: ActivityDefine.MODEL_PAGE,
+  //     target: page,
+  //     action: ActivityDefine.ACTION_LIKE,
+  //   };
+
+  //   return this.createByParameters(parameters);
+  // };
+
+  // /**
+  //    * @param {User} user
+  //    * @return {Promise}
+  //    */
+  // activitySchema.statics.findByUser = function(user) {
+  //   return this.find({ user }).sort({ createdAt: -1 }).exec();
+  // };
+
+  // activitySchema.statics.getActionUsersFromActivities = function(activities) {
+  //   return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
+  // };
 
 
   activitySchema.methods.getNotificationTargetUsers = async function() {
   activitySchema.methods.getNotificationTargetUsers = async function() {
     const User = getModelSafely('User') || require('~/server/models/user')();
     const User = getModelSafely('User') || require('~/server/models/user')();

+ 0 - 6
packages/app/src/server/models/in-app-notification.ts

@@ -79,12 +79,6 @@ const inAppNotificationSchema = new Schema<InAppNotificationDocument, InAppNotif
   },
   },
 });
 });
 
 
-// TODO: move this virtual property getter to the service layer if necessary by #78284
-// 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[]);
-// });
-
 const transform = (doc, ret) => {
 const transform = (doc, ret) => {
   // delete ret.activities
   // delete ret.activities
 };
 };

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

@@ -1,6 +1,8 @@
+import { Types } from 'mongoose';
 import Crowi from '../crowi';
 import Crowi from '../crowi';
 
 
 import ActivityDefine from '../util/activityDefine';
 import ActivityDefine from '../util/activityDefine';
+import Subscription from '../models/subscription';
 import { getModelSafely } from '../util/mongoose-utils';
 import { getModelSafely } from '../util/mongoose-utils';
 
 
 
 
@@ -35,6 +37,68 @@ class ActivityService {
     return savedActivity;
     return savedActivity;
   };
   };
 
 
+  /**
+     * @param {object} parameters
+     * @return {Promise}
+     */
+  createByParameters = function(parameters) {
+    const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
+    return Activity.create(parameters);
+  };
+
+  /**
+   * @param {Comment} comment
+   * @return {Promise}
+   */
+  createByPageComment = function(comment) {
+    const parameters = {
+      user: comment.creator,
+      targetModel: ActivityDefine.MODEL_PAGE,
+      target: comment.page,
+      eventModel: ActivityDefine.MODEL_COMMENT,
+      event: comment._id,
+      action: ActivityDefine.ACTION_COMMENT,
+    };
+
+    return this.createByParameters(parameters);
+  };
+
+  /**
+   * @param {User} user
+   * @return {Promise}
+   */
+  static findByUser = function(user) {
+    return this.find({ user }).sort({ createdAt: -1 }).exec();
+  };
+
+  static getActionUsersFromActivities = function(activities) {
+    return activities.map(({ user }) => user).filter((user, i, self) => self.indexOf(user) === i);
+  };
+
+  // getNotificationTargetUsers = async function() {
+  //   const User = getModelSafely('User') || require('~/server/models/user')();
+  //   const { user: actionUser, targetModel, target } = this;
+
+  //   const model: any = await this.model(targetModel).findById(target);
+  //   const [targetUsers, watchUsers, ignoreUsers] = await Promise.all([
+  //     model.getNotificationTargetUsers(),
+  //     Subscription.getWatchers((target as any) as Types.ObjectId),
+  //     Subscription.getUnwatchers((target as any) as Types.ObjectId),
+  //   ]);
+
+  //   const unique = array => Object.values(array.reduce((objects, object) => ({ ...objects, [object.toString()]: object }), {}));
+  //   const filter = (array, pull) => {
+  //     const ids = pull.map(object => object.toString());
+  //     return array.filter(object => !ids.includes(object.toString()));
+  //   };
+  //   const notificationUsers = filter(unique([...targetUsers, ...watchUsers]), [...ignoreUsers, actionUser]);
+  //   const activeNotificationUsers = await User.find({
+  //     _id: { $in: notificationUsers },
+  //     status: User.STATUS_ACTIVE,
+  //   }).distinct('_id');
+  //   return activeNotificationUsers;
+  // };
+
 
 
 }
 }
 
 

+ 5 - 2
packages/app/src/server/service/comment.ts

@@ -32,13 +32,16 @@ class CommentService {
   initCommentEventListeners(): void {
   initCommentEventListeners(): void {
     // create
     // create
     this.commentEvent.on('create', async(savedComment) => {
     this.commentEvent.on('create', async(savedComment) => {
+      const { activityService } = this.crowi;
+      console.log('activityServiceHoge', activityService);
 
 
       try {
       try {
         const Page = getModelSafely('Page') || require('../models/page')(this.crowi);
         const Page = getModelSafely('Page') || require('../models/page')(this.crowi);
         await Page.updateCommentCount(savedComment.page);
         await Page.updateCommentCount(savedComment.page);
 
 
-        const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
-        const savedActivity = await Activity.createByPageComment(savedComment);
+
+        // const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
+        const savedActivity = await activityService.createByPageComment(savedComment);
 
 
         let targetUsers: Types.ObjectId[] = [];
         let targetUsers: Types.ObjectId[] = [];
         targetUsers = await savedActivity.getNotificationTargetUsers();
         targetUsers = await savedActivity.getNotificationTargetUsers();

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

@@ -68,6 +68,11 @@ export default class InAppNotificationService {
     return;
     return;
   }
   }
 
 
+  // 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[]);
+  // });
+
 }
 }
 
 
 module.exports = InAppNotificationService;
 module.exports = InAppNotificationService;