Shun Miyazawa 3 лет назад
Родитель
Сommit
3af9d3eb19

+ 2 - 1
packages/app/src/server/middlewares/add-activity.ts

@@ -2,6 +2,7 @@ import { NextFunction, Request, Response } from 'express';
 
 import { SupportedAction } from '~/interfaces/activity';
 import { IUserHasId } from '~/interfaces/user';
+import Activity from '~/server/models/activity';
 import loggerFactory from '~/utils/logger';
 
 
@@ -23,7 +24,7 @@ export const generateAddActivityMiddleware = crowi => async(req: AuthorizedReque
   };
 
   try {
-    const activity = await crowi.activityService.createByParameters(parameter);
+    const activity = await Activity.createByParameters(parameter);
     res.locals.activity = activity;
   }
   catch (err) {

+ 16 - 1
packages/app/src/server/models/activity.ts

@@ -5,7 +5,7 @@ import {
 import mongoosePaginate from 'mongoose-paginate-v2';
 
 import {
-  ISnapshot, AllSupportedAction, SupportedActionType,
+  IActivity, ISnapshot, AllSupportedAction, SupportedActionType,
   AllSupportedTargetModel, SupportedTargetModelType,
   AllSupportedEventModel, SupportedEventModelType,
 } from '~/interfaces/activity';
@@ -14,8 +14,11 @@ import loggerFactory from '../../utils/logger';
 
 import Subscription from './subscription';
 
+
 const logger = loggerFactory('growi:models:activity');
 
+type CreateActivityParameterType = Pick<IActivity, 'user' | 'createdAt' | 'ip' | 'endpoint' | 'snapshot'>
+type UpdateActivityParameterType = Omit<IActivity, 'user' | 'createdAt' | 'ip' | 'endpoint'>
 export interface ActivityDocument extends Document {
   _id: Types.ObjectId
   user: Types.ObjectId
@@ -112,6 +115,18 @@ activitySchema.methods.getNotificationTargetUsers = async function() {
   return activeNotificationUsers;
 };
 
+activitySchema.statics.createByParameters = async function(parameters: CreateActivityParameterType): Promise<IActivity> {
+  const activity = await this.create(parameters) as unknown as IActivity;
+
+  return activity;
+};
+
+activitySchema.statics.updateByParameters = async function(activityId: string, parameters: UpdateActivityParameterType): Promise<IActivity> {
+  const activity = await this.findOneAndUpdate({ _id: activityId }, parameters, { new: true }) as unknown as IActivity;
+
+  return activity;
+};
+
 activitySchema.statics.getPaginatedActivity = async function(limit: number, offset: number, query) {
   const paginateResult = await this.paginate(
     query,

+ 1 - 16
packages/app/src/server/service/activity.ts

@@ -1,4 +1,3 @@
-import { getModelSafely } from '@growi/core';
 import mongoose from 'mongoose';
 
 import { IActivity } from '~/interfaces/activity';
@@ -23,8 +22,6 @@ class ActivityService {
     this.crowi = crowi;
     this.activityEvent = crowi.event('activity');
 
-    this.updateByParameters = this.updateByParameters.bind(this);
-
     this.initActivityEventListeners();
   }
 
@@ -32,7 +29,7 @@ class ActivityService {
     this.activityEvent.on('update', async(activityId: string, parameters: UpdateActivityParameterType, target?: IPage) => {
       let activity: IActivity;
       try {
-        activity = await this.updateByParameters(activityId, parameters);
+        activity = await Activity.updateByParameters(activityId, parameters);
       }
       catch (err) {
         logger.error('Update activity failed', err);
@@ -72,18 +69,6 @@ class ActivityService {
     }
   };
 
-  createByParameters = function(parameters) {
-    const Activity = getModelSafely('Activity') || require('../models/activity')(this.crowi);
-
-    return Activity.create(parameters);
-  };
-
-  updateByParameters = async function(activityId: string, parameters: UpdateActivityParameterType): Promise<IActivity> {
-    const activity = await Activity.findOneAndUpdate({ _id: activityId }, parameters, { new: true }) as unknown as IActivity;
-
-    return activity;
-  };
-
   findByUser = function(user) {
     return this.find({ user }).sort({ createdAt: -1 }).exec();
   };