Sfoglia il codice sorgente

Merge pull request #6058 from weseek/imprv/activity-interfaces

imprv: Activity interfaces
Shun Miyazawa 3 anni fa
parent
commit
ed0f4557be

+ 2 - 2
packages/app/src/components/Admin/AuditLogManagement.tsx

@@ -4,7 +4,7 @@ import { format } from 'date-fns';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 
 
 import {
 import {
-  SupportedActionType, AllSupportedActionType, PageActions, CommentActions,
+  SupportedActionType, AllSupportedAction, PageActions, CommentActions,
 } from '~/interfaces/activity';
 } from '~/interfaces/activity';
 import { useSWRxActivity } from '~/stores/activity';
 import { useSWRxActivity } from '~/stores/activity';
 
 
@@ -39,7 +39,7 @@ export const AuditLogManagement: FC = () => {
   const [endDate, setEndDate] = useState<Date | null>(null);
   const [endDate, setEndDate] = useState<Date | null>(null);
   const [selectedUsernames, setSelectedUsernames] = useState<string[]>([]);
   const [selectedUsernames, setSelectedUsernames] = useState<string[]>([]);
   const [actionMap, setActionMap] = useState(
   const [actionMap, setActionMap] = useState(
-    new Map<SupportedActionType, boolean>(AllSupportedActionType.map(action => [action, true])),
+    new Map<SupportedActionType, boolean>(AllSupportedAction.map(action => [action, true])),
   );
   );
 
 
   /*
   /*

+ 33 - 32
packages/app/src/interfaces/activity.ts

@@ -12,14 +12,14 @@ const ACTION_REGISTRATION_SUCCESS = 'REGISTRATION_SUCCESS';
 const ACTION_LOGIN_SUCCESS = 'LOGIN_SUCCESS';
 const ACTION_LOGIN_SUCCESS = 'LOGIN_SUCCESS';
 const ACTION_LOGIN_FAILURE = 'LOGIN_FAILURE';
 const ACTION_LOGIN_FAILURE = 'LOGIN_FAILURE';
 const ACTION_LOGOUT = 'LOGOUT';
 const ACTION_LOGOUT = 'LOGOUT';
-const ACTION_PERSONAL_SETTINGS_UPDATE = 'PERSONAL_SETTINGS_UPDATE';
-const ACTION_PASSWORD_UPDATE = 'PASSWORD_UPDATE';
-const ACTION_IMAGE_TYPE_UPDATE = 'IMAGE_TYPE_UPDATE';
-const ACTION_LDAP_ACCOUNT_ASSOCIATE = 'LDAP_ACCOUNT_ASSOCIATE';
-const ACTION_LDAP_ACCOUNT_DISCONNECT = 'LDAP_ACCOUNT_DISCONNECT';
-const ACTION_API_TOKEN_CREATE = 'API_TOKEN_CREATE';
-const ACTION_EDITOR_SETTINGS_UPDATE = 'EDITOR_SETTINGS_UPDATE';
-const ACTION_IN_APP_NOTIFICATION_SETTINGS_UPDATE = 'IN_APP_NOTIFICATION_SETTINGS_UPDATE';
+const ACTION_USER_PERSONAL_SETTINGS_UPDATE = 'USER_PERSONAL_SETTINGS_UPDATE';
+const ACTION_USER_IMAGE_TYPE_UPDATE = 'USER_IMAGE_TYPE_UPDATE';
+const ACTION_USER_LDAP_ACCOUNT_ASSOCIATE = 'USER_LDAP_ACCOUNT_ASSOCIATE';
+const ACTION_USER_LDAP_ACCOUNT_DISCONNECT = 'USER_LDAP_ACCOUNT_DISCONNECT';
+const ACTION_USER_PASSWORD_UPDATE = 'USER_PASSWORD_UPDATE';
+const ACTION_USER_API_TOKEN_UPDATE = 'USER_API_TOKEN_UPDATE';
+const ACTION_USER_EDITOR_SETTINGS_UPDATE = 'USER_EDITOR_SETTINGS_UPDATE';
+const ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE = 'USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE';
 const ACTION_PAGE_VIEW = 'PAGE_VIEW';
 const ACTION_PAGE_VIEW = 'PAGE_VIEW';
 const ACTION_PAGE_LIKE = 'PAGE_LIKE';
 const ACTION_PAGE_LIKE = 'PAGE_LIKE';
 const ACTION_PAGE_UNLIKE = 'PAGE_UNLIKE';
 const ACTION_PAGE_UNLIKE = 'PAGE_UNLIKE';
@@ -36,29 +36,28 @@ const ACTION_COMMENT_CREATE = 'COMMENT_CREATE';
 const ACTION_COMMENT_UPDATE = 'COMMENT_UPDATE';
 const ACTION_COMMENT_UPDATE = 'COMMENT_UPDATE';
 const ACTION_COMMENT_REMOVE = 'COMMENT_REMOVE';
 const ACTION_COMMENT_REMOVE = 'COMMENT_REMOVE';
 
 
-
-export const SUPPORTED_TARGET_MODEL_TYPE = {
+export const SupportedTargetModel = {
   MODEL_PAGE,
   MODEL_PAGE,
 } as const;
 } as const;
 
 
-export const SUPPORTED_EVENT_MODEL_TYPE = {
+export const SupportedEventModel = {
   MODEL_COMMENT,
   MODEL_COMMENT,
 } as const;
 } as const;
 
 
-export const SUPPORTED_ACTION_TYPE = {
+export const SupportedAction = {
   ACTION_UNSETTLED,
   ACTION_UNSETTLED,
   ACTION_REGISTRATION_SUCCESS,
   ACTION_REGISTRATION_SUCCESS,
   ACTION_LOGIN_SUCCESS,
   ACTION_LOGIN_SUCCESS,
   ACTION_LOGIN_FAILURE,
   ACTION_LOGIN_FAILURE,
   ACTION_LOGOUT,
   ACTION_LOGOUT,
-  ACTION_PERSONAL_SETTINGS_UPDATE,
-  ACTION_IMAGE_TYPE_UPDATE,
-  ACTION_LDAP_ACCOUNT_ASSOCIATE,
-  ACTION_LDAP_ACCOUNT_DISCONNECT,
-  ACTION_PASSWORD_UPDATE,
-  ACTION_API_TOKEN_CREATE,
-  ACTION_EDITOR_SETTINGS_UPDATE,
-  ACTION_IN_APP_NOTIFICATION_SETTINGS_UPDATE,
+  ACTION_USER_PERSONAL_SETTINGS_UPDATE,
+  ACTION_USER_IMAGE_TYPE_UPDATE,
+  ACTION_USER_LDAP_ACCOUNT_ASSOCIATE,
+  ACTION_USER_LDAP_ACCOUNT_DISCONNECT,
+  ACTION_USER_PASSWORD_UPDATE,
+  ACTION_USER_API_TOKEN_UPDATE,
+  ACTION_USER_EDITOR_SETTINGS_UPDATE,
+  ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE,
   ACTION_PAGE_VIEW,
   ACTION_PAGE_VIEW,
   ACTION_PAGE_LIKE,
   ACTION_PAGE_LIKE,
   ACTION_PAGE_UNLIKE,
   ACTION_PAGE_UNLIKE,
@@ -76,7 +75,7 @@ export const SUPPORTED_ACTION_TYPE = {
   ACTION_COMMENT_REMOVE,
   ACTION_COMMENT_REMOVE,
 } as const;
 } as const;
 
 
-export const SUPPORTED_ACTION_TO_NOTIFIED_TYPE = {
+export const SupportedActionToNotified = {
   ACTION_PAGE_LIKE,
   ACTION_PAGE_LIKE,
   ACTION_PAGE_BOOKMARK,
   ACTION_PAGE_BOOKMARK,
   ACTION_PAGE_UPDATE,
   ACTION_PAGE_UPDATE,
@@ -88,13 +87,6 @@ export const SUPPORTED_ACTION_TO_NOTIFIED_TYPE = {
   ACTION_COMMENT_CREATE,
   ACTION_COMMENT_CREATE,
 } as const;
 } as const;
 
 
-
-export const AllSupportedTargetModelType = Object.values(SUPPORTED_TARGET_MODEL_TYPE);
-export const AllSupportedEventModelType = Object.values(SUPPORTED_EVENT_MODEL_TYPE);
-export const AllSupportedActionType = Object.values(SUPPORTED_ACTION_TYPE);
-export const AllSupportedActionToNotifiedType = Object.values(SUPPORTED_ACTION_TO_NOTIFIED_TYPE);
-
-
 /*
 /*
  * For AuditLogManagement.tsx
  * For AuditLogManagement.tsx
  */
  */
@@ -115,11 +107,20 @@ export const CommentActions = Object.values({
   ACTION_COMMENT_UPDATE,
   ACTION_COMMENT_UPDATE,
 } as const);
 } as const);
 
 
+/*
+ * Array
+ */
+export const AllSupportedTargetModel = Object.values(SupportedTargetModel);
+export const AllSupportedEventModel = Object.values(SupportedEventModel);
+export const AllSupportedAction = Object.values(SupportedAction);
+export const AllSupportedActionToNotified = Object.values(SupportedActionToNotified);
 
 
-export type SupportedTargetModelType = typeof SUPPORTED_TARGET_MODEL_TYPE[keyof typeof SUPPORTED_TARGET_MODEL_TYPE];
-export type SupportedEventModelType = typeof SUPPORTED_EVENT_MODEL_TYPE[keyof typeof SUPPORTED_EVENT_MODEL_TYPE];
-export type SupportedActionType = typeof SUPPORTED_ACTION_TYPE[keyof typeof SUPPORTED_ACTION_TYPE];
-
+/*
+ * Type
+ */
+export type SupportedTargetModelType = typeof SupportedTargetModel[keyof typeof SupportedTargetModel];
+export type SupportedEventModelType = typeof SupportedEventModel[keyof typeof SupportedEventModel];
+export type SupportedActionType = typeof SupportedAction[keyof typeof SupportedAction];
 
 
 export type ISnapshot = Partial<Pick<IUser, 'username'>>
 export type ISnapshot = Partial<Pick<IUser, 'username'>>
 
 

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

@@ -1,6 +1,6 @@
 import { NextFunction, Request, Response } from 'express';
 import { NextFunction, Request, Response } from 'express';
 
 
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import { IUserHasId } from '~/interfaces/user';
 import { IUserHasId } from '~/interfaces/user';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -15,7 +15,7 @@ export const generateAddActivityMiddleware = crowi => async(req: AuthorizedReque
   const parameter = {
   const parameter = {
     ip:  req.ip,
     ip:  req.ip,
     endpoint: req.originalUrl,
     endpoint: req.originalUrl,
-    action: SUPPORTED_ACTION_TYPE.ACTION_UNSETTLED,
+    action: SupportedAction.ACTION_UNSETTLED,
     user: req.user?._id,
     user: req.user?._id,
     snapshot: {
     snapshot: {
       username: req.user?.username,
       username: req.user?.username,

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

@@ -5,9 +5,9 @@ import {
 import mongoosePaginate from 'mongoose-paginate-v2';
 import mongoosePaginate from 'mongoose-paginate-v2';
 
 
 import {
 import {
-  ISnapshot, AllSupportedActionType, SupportedActionType,
-  AllSupportedTargetModelType, SupportedTargetModelType,
-  AllSupportedEventModelType, SupportedEventModelType,
+  ISnapshot, AllSupportedAction, SupportedActionType,
+  AllSupportedTargetModel, SupportedTargetModelType,
+  AllSupportedEventModel, SupportedEventModelType,
 } from '~/interfaces/activity';
 } from '~/interfaces/activity';
 
 
 import loggerFactory from '../../utils/logger';
 import loggerFactory from '../../utils/logger';
@@ -55,7 +55,7 @@ const activitySchema = new Schema<ActivityDocument, ActivityModel>({
   },
   },
   targetModel: {
   targetModel: {
     type: String,
     type: String,
-    enum: AllSupportedTargetModelType,
+    enum: AllSupportedTargetModel,
   },
   },
   target: {
   target: {
     type: Schema.Types.ObjectId,
     type: Schema.Types.ObjectId,
@@ -63,14 +63,14 @@ const activitySchema = new Schema<ActivityDocument, ActivityModel>({
   },
   },
   eventModel: {
   eventModel: {
     type: String,
     type: String,
-    enum: AllSupportedEventModelType,
+    enum: AllSupportedEventModel,
   },
   },
   event: {
   event: {
     type: Schema.Types.ObjectId,
     type: Schema.Types.ObjectId,
   },
   },
   action: {
   action: {
     type: String,
     type: String,
-    enum: AllSupportedActionType,
+    enum: AllSupportedAction,
     required: true,
     required: true,
   },
   },
   snapshot: snapshotSchema,
   snapshot: snapshotSchema,

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

@@ -4,7 +4,7 @@ import {
 } from 'mongoose';
 } from 'mongoose';
 import mongoosePaginate from 'mongoose-paginate-v2';
 import mongoosePaginate from 'mongoose-paginate-v2';
 
 
-import { AllSupportedTargetModelType, AllSupportedActionType } from '~/interfaces/activity';
+import { AllSupportedTargetModel, AllSupportedAction } from '~/interfaces/activity';
 import { InAppNotificationStatuses } from '~/interfaces/in-app-notification';
 import { InAppNotificationStatuses } from '~/interfaces/in-app-notification';
 
 
 import { ActivityDocument } from './activity';
 import { ActivityDocument } from './activity';
@@ -46,7 +46,7 @@ const inAppNotificationSchema = new Schema<InAppNotificationDocument, InAppNotif
   targetModel: {
   targetModel: {
     type: String,
     type: String,
     required: true,
     required: true,
-    enum: AllSupportedTargetModelType,
+    enum: AllSupportedTargetModel,
   },
   },
   target: {
   target: {
     type: Schema.Types.ObjectId,
     type: Schema.Types.ObjectId,
@@ -56,7 +56,7 @@ const inAppNotificationSchema = new Schema<InAppNotificationDocument, InAppNotif
   action: {
   action: {
     type: String,
     type: String,
     required: true,
     required: true,
-    enum: AllSupportedActionType,
+    enum: AllSupportedAction,
   },
   },
   activities: [
   activities: [
     {
     {

+ 2 - 2
packages/app/src/server/models/subscription.ts

@@ -3,7 +3,7 @@ import {
   Types, Document, Model, Schema,
   Types, Document, Model, Schema,
 } from 'mongoose';
 } from 'mongoose';
 
 
-import { AllSupportedTargetModelType } from '~/interfaces/activity';
+import { AllSupportedTargetModel } from '~/interfaces/activity';
 import { SubscriptionStatusType, AllSubscriptionStatusType } from '~/interfaces/subscription';
 import { SubscriptionStatusType, AllSubscriptionStatusType } from '~/interfaces/subscription';
 
 
 
 
@@ -38,7 +38,7 @@ const subscriptionSchema = new Schema<SubscriptionDocument, SubscriptionModel>({
   targetModel: {
   targetModel: {
     type: String,
     type: String,
     required: true,
     required: true,
-    enum: AllSupportedTargetModelType,
+    enum: AllSupportedTargetModel,
   },
   },
   target: {
   target: {
     type: Schema.Types.ObjectId,
     type: Schema.Types.ObjectId,

+ 2 - 2
packages/app/src/server/routes/apiv3/activity.ts

@@ -3,7 +3,7 @@ import express, { Request, Router } from 'express';
 import rateLimit from 'express-rate-limit';
 import rateLimit from 'express-rate-limit';
 import { query } from 'express-validator';
 import { query } from 'express-validator';
 
 
-import { AllSupportedActionType } from '~/interfaces/activity';
+import { AllSupportedAction } from '~/interfaces/activity';
 import Activity from '~/server/models/activity';
 import Activity from '~/server/models/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -55,7 +55,7 @@ module.exports = (crowi: Crowi): Router => {
       }
       }
 
 
       // add action to query
       // add action to query
-      const canContainActionFilterToQuery = parsedSearchFilter.actions.every(a => AllSupportedActionType.includes(a));
+      const canContainActionFilterToQuery = parsedSearchFilter.actions.every(a => AllSupportedAction.includes(a));
       if (canContainActionFilterToQuery) {
       if (canContainActionFilterToQuery) {
         Object.assign(query, { action: parsedSearchFilter.actions });
         Object.assign(query, { action: parsedSearchFilter.actions });
       }
       }

+ 3 - 3
packages/app/src/server/routes/apiv3/bookmarks.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE, SUPPORTED_TARGET_MODEL_TYPE } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -311,9 +311,9 @@ module.exports = (crowi) => {
     }
     }
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: bool ? SUPPORTED_ACTION_TYPE.ACTION_PAGE_BOOKMARK : SUPPORTED_ACTION_TYPE.ACTION_PAGE_UNBOOKMARK,
+      action: bool ? SupportedAction.ACTION_PAGE_BOOKMARK : SupportedAction.ACTION_PAGE_UNBOOKMARK,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 

+ 2 - 2
packages/app/src/server/routes/apiv3/logout.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -17,7 +17,7 @@ module.exports = (crowi) => {
     req.session.destroy();
     req.session.destroy();
 
 
     const activityId = res.locals.activity._id;
     const activityId = res.locals.activity._id;
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_LOGOUT };
+    const parameters = { action: SupportedAction.ACTION_LOGOUT };
     activityEvent.emit('update', activityId, parameters);
     activityEvent.emit('update', activityId, parameters);
 
 
     return res.send();
     return res.send();

+ 3 - 3
packages/app/src/server/routes/apiv3/page.js

@@ -1,6 +1,6 @@
 import { pagePathUtils } from '@growi/core';
 import { pagePathUtils } from '@growi/core';
 
 
-import { SUPPORTED_ACTION_TYPE, SUPPORTED_TARGET_MODEL_TYPE } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { AllSubscriptionStatusType } from '~/interfaces/subscription';
 import { AllSubscriptionStatusType } from '~/interfaces/subscription';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import Subscription from '~/server/models/subscription';
 import Subscription from '~/server/models/subscription';
@@ -338,9 +338,9 @@ module.exports = (crowi) => {
     result.seenUser = page.seenUsers;
     result.seenUser = page.seenUsers;
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: isLiked ? SUPPORTED_ACTION_TYPE.ACTION_PAGE_LIKE : SUPPORTED_ACTION_TYPE.ACTION_PAGE_UNLIKE,
+      action: isLiked ? SupportedAction.ACTION_PAGE_LIKE : SupportedAction.ACTION_PAGE_UNLIKE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 

+ 7 - 7
packages/app/src/server/routes/apiv3/pages.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_TARGET_MODEL_TYPE, SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedTargetModel, SupportedAction } from '~/interfaces/activity';
 import { subscribeRuleNames } from '~/interfaces/in-app-notification';
 import { subscribeRuleNames } from '~/interfaces/in-app-notification';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -330,9 +330,9 @@ module.exports = (crowi) => {
     }
     }
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: createdPage,
       target: createdPage,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_CREATE,
+      action: SupportedAction.ACTION_PAGE_CREATE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
@@ -553,9 +553,9 @@ module.exports = (crowi) => {
 
 
     const activityId = res.locals.activity._id;
     const activityId = res.locals.activity._id;
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_RENAME,
+      action: SupportedAction.ACTION_PAGE_RENAME,
     };
     };
     activityEvent.emit('update', activityId, parameters, page);
     activityEvent.emit('update', activityId, parameters, page);
 
 
@@ -759,9 +759,9 @@ module.exports = (crowi) => {
     }
     }
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_DUPLICATE,
+      action: SupportedAction.ACTION_PAGE_DUPLICATE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 

+ 11 - 9
packages/app/src/server/routes/apiv3/personal-setting.js

@@ -1,6 +1,6 @@
 import { body } from 'express-validator';
 import { body } from 'express-validator';
 
 
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import { allLocales } from '~/next-i18next.config';
 import { allLocales } from '~/next-i18next.config';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -244,7 +244,7 @@ module.exports = (crowi) => {
       const updatedUser = await user.save();
       const updatedUser = await user.save();
       req.i18n.changeLanguage(req.body.lang);
       req.i18n.changeLanguage(req.body.lang);
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PERSONAL_SETTINGS_UPDATE };
+      const parameters = { action: SupportedAction.ACTION_USER_PERSONAL_SETTINGS_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3({ updatedUser });
       return res.apiv3({ updatedUser });
@@ -282,7 +282,7 @@ module.exports = (crowi) => {
     try {
     try {
       const userData = await req.user.updateIsGravatarEnabled(isGravatarEnabled);
       const userData = await req.user.updateIsGravatarEnabled(isGravatarEnabled);
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_IMAGE_TYPE_UPDATE };
+      const parameters = { action: SupportedAction.ACTION_USER_IMAGE_TYPE_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3({ userData });
       return res.apiv3({ userData });
@@ -362,8 +362,10 @@ module.exports = (crowi) => {
     }
     }
     try {
     try {
       const userData = await user.updatePassword(newPassword);
       const userData = await user.updatePassword(newPassword);
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PASSWORD_UPDATE };
+
+      const parameters = { action: SupportedAction.ACTION_USER_PASSWORD_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
+
       return res.apiv3({ userData });
       return res.apiv3({ userData });
     }
     }
     catch (err) {
     catch (err) {
@@ -399,7 +401,7 @@ module.exports = (crowi) => {
     try {
     try {
       const userData = await user.updateApiToken();
       const userData = await user.updateApiToken();
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_API_TOKEN_CREATE };
+      const parameters = { action: SupportedAction.ACTION_USER_API_TOKEN_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3({ userData });
       return res.apiv3({ userData });
@@ -451,7 +453,7 @@ module.exports = (crowi) => {
       await passport.authenticate('ldapauth');
       await passport.authenticate('ldapauth');
       const associateUser = await ExternalAccount.associate('ldap', username, user);
       const associateUser = await ExternalAccount.associate('ldap', username, user);
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_LDAP_ACCOUNT_ASSOCIATE };
+      const parameters = { action: SupportedAction.ACTION_USER_LDAP_ACCOUNT_ASSOCIATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3({ associateUser });
       return res.apiv3({ associateUser });
@@ -502,7 +504,7 @@ module.exports = (crowi) => {
       }
       }
       const disassociateUser = await ExternalAccount.findOneAndRemove({ providerType, accountId, user });
       const disassociateUser = await ExternalAccount.findOneAndRemove({ providerType, accountId, user });
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_LDAP_ACCOUNT_DISCONNECT };
+      const parameters = { action: SupportedAction.ACTION_USER_LDAP_ACCOUNT_DISCONNECT };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3({ disassociateUser });
       return res.apiv3({ disassociateUser });
@@ -562,7 +564,7 @@ module.exports = (crowi) => {
     try {
     try {
       const response = await EditorSettings.findOneAndUpdate(query, { $set: document }, options);
       const response = await EditorSettings.findOneAndUpdate(query, { $set: document }, options);
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_EDITOR_SETTINGS_UPDATE };
+      const parameters = { action: SupportedAction.ACTION_USER_EDITOR_SETTINGS_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3(response);
       return res.apiv3(response);
@@ -639,7 +641,7 @@ module.exports = (crowi) => {
     try {
     try {
       const response = await InAppNotificationSettings.findOneAndUpdate(query, { $set: { subscribeRules } }, options);
       const response = await InAppNotificationSettings.findOneAndUpdate(query, { $set: { subscribeRules } }, options);
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_IN_APP_NOTIFICATION_SETTINGS_UPDATE };
+      const parameters = { action: SupportedAction.ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.apiv3(response);
       return res.apiv3(response);

+ 6 - 6
packages/app/src/server/routes/comment.js

@@ -1,5 +1,5 @@
 
 
-import { SUPPORTED_ACTION_TYPE, SUPPORTED_TARGET_MODEL_TYPE, SUPPORTED_EVENT_MODEL_TYPE } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel, SupportedEventModel } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 /**
 /**
@@ -262,11 +262,11 @@ module.exports = function(crowi, app) {
     );
     );
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      eventModel: SUPPORTED_EVENT_MODEL_TYPE.MODEL_COMMENT,
+      eventModel: SupportedEventModel.MODEL_COMMENT,
       event: createdComment,
       event: createdComment,
-      action: SUPPORTED_ACTION_TYPE.ACTION_COMMENT_CREATE,
+      action: SupportedAction.ACTION_COMMENT_CREATE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 
@@ -398,7 +398,7 @@ module.exports = function(crowi, app) {
       return res.json(ApiResponse.error(err));
       return res.json(ApiResponse.error(err));
     }
     }
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_COMMENT_UPDATE };
+    const parameters = { action: SupportedAction.ACTION_COMMENT_UPDATE };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     res.json(ApiResponse.success({ comment: updatedComment }));
     res.json(ApiResponse.success({ comment: updatedComment }));
@@ -480,7 +480,7 @@ module.exports = function(crowi, app) {
       return res.json(ApiResponse.error(err));
       return res.json(ApiResponse.error(err));
     }
     }
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_COMMENT_REMOVE };
+    const parameters = { action: SupportedAction.ACTION_COMMENT_REMOVE };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return res.json(ApiResponse.success({}));
     return res.json(ApiResponse.success({}));

+ 2 - 2
packages/app/src/server/routes/installer.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import { InstallerService, FailedToCreateAdminUserError } from '../service/installer';
 import { InstallerService, FailedToCreateAdminUserError } from '../service/installer';
@@ -59,7 +59,7 @@ module.exports = function(crowi) {
 
 
       req.flash('successMessage', req.t('message.complete_to_install2'));
       req.flash('successMessage', req.t('message.complete_to_install2'));
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_REGISTRATION_SUCCESS };
+      const parameters = { action: SupportedAction.ACTION_REGISTRATION_SUCCESS };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.redirect('/');
       return res.redirect('/');

+ 3 - 3
packages/app/src/server/routes/login-passport.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import { NullUsernameToBeRegisteredError } from '~/server/models/errors';
 import { NullUsernameToBeRegisteredError } from '~/server/models/errors';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -33,7 +33,7 @@ module.exports = function(crowi, app) {
     // remove session.redirectTo
     // remove session.redirectTo
     delete req.session.redirectTo;
     delete req.session.redirectTo;
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_LOGIN_SUCCESS };
+    const parameters = { action: SupportedAction.ACTION_LOGIN_SUCCESS };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return res.safeRedirect(redirectTo);
     return res.safeRedirect(redirectTo);
@@ -47,7 +47,7 @@ module.exports = function(crowi, app) {
   const loginFailureHandler = async(req, res, message) => {
   const loginFailureHandler = async(req, res, message) => {
     req.flash('errorMessage', message || req.t('message.sign_in_failure'));
     req.flash('errorMessage', message || req.t('message.sign_in_failure'));
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_LOGIN_FAILURE };
+    const parameters = { action: SupportedAction.ACTION_LOGIN_FAILURE };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return res.redirect('/login');
     return res.redirect('/login');

+ 2 - 2
packages/app/src/server/routes/login.js

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 // disable all of linting
 // disable all of linting
 // because this file is a deprecated legacy of Crowi
 // because this file is a deprecated legacy of Crowi
@@ -40,7 +40,7 @@ module.exports = function(crowi, app) {
       // remove session.redirectTo
       // remove session.redirectTo
       delete req.session.redirectTo;
       delete req.session.redirectTo;
 
 
-      const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_REGISTRATION_SUCCESS };
+      const parameters = { action: SupportedAction.ACTION_REGISTRATION_SUCCESS };
       activityEvent.emit('update', res.locals.activity._id, parameters);
       activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
       return res.safeRedirect(redirectTo);
       return res.safeRedirect(redirectTo);

+ 11 - 11
packages/app/src/server/routes/page.js

@@ -3,7 +3,7 @@ import { body } from 'express-validator';
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 import urljoin from 'url-join';
 import urljoin from 'url-join';
 
 
-import { SUPPORTED_TARGET_MODEL_TYPE, SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedTargetModel, SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import { PathAlreadyExistsError } from '../models/errors';
 import { PathAlreadyExistsError } from '../models/errors';
@@ -406,7 +406,7 @@ module.exports = function(crowi, app) {
 
 
     await addRenderVarsForPageTree(renderVars, portalPath, req.user);
     await addRenderVarsForPageTree(renderVars, portalPath, req.user);
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_VIEW };
+    const parameters = { action: SupportedAction.ACTION_PAGE_VIEW };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return res.render(view, renderVars);
     return res.render(view, renderVars);
@@ -470,7 +470,7 @@ module.exports = function(crowi, app) {
 
 
     await addRenderVarsForPageTree(renderVars, path, req.user);
     await addRenderVarsForPageTree(renderVars, path, req.user);
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_VIEW };
+    const parameters = { action: SupportedAction.ACTION_PAGE_VIEW };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return res.render(view, renderVars);
     return res.render(view, renderVars);
@@ -651,7 +651,7 @@ module.exports = function(crowi, app) {
   actions.redirector = async function(req, res, next) {
   actions.redirector = async function(req, res, next) {
     const path = getPathFromRequest(req);
     const path = getPathFromRequest(req);
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_VIEW };
+    const parameters = { action: SupportedAction.ACTION_PAGE_VIEW };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return redirector(req, res, next, path);
     return redirector(req, res, next, path);
@@ -661,7 +661,7 @@ module.exports = function(crowi, app) {
     const _path = getPathFromRequest(req);
     const _path = getPathFromRequest(req);
     const path = pathUtils.removeTrailingSlash(_path);
     const path = pathUtils.removeTrailingSlash(_path);
 
 
-    const parameters = { action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_VIEW };
+    const parameters = { action: SupportedAction.ACTION_PAGE_VIEW };
     activityEvent.emit('update', res.locals.activity._id, parameters);
     activityEvent.emit('update', res.locals.activity._id, parameters);
 
 
     return redirector(req, res, next, path);
     return redirector(req, res, next, path);
@@ -1000,9 +1000,9 @@ module.exports = function(crowi, app) {
     }
     }
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_UPDATE,
+      action: SupportedAction.ACTION_PAGE_UPDATE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
   };
   };
@@ -1242,9 +1242,9 @@ module.exports = function(crowi, app) {
     result.isCompletely = isCompletely;
     result.isCompletely = isCompletely;
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: isCompletely ? SUPPORTED_ACTION_TYPE.ACTION_PAGE_DELETE_COMPLETELY : SUPPORTED_ACTION_TYPE.ACTION_PAGE_DELETE,
+      action: isCompletely ? SupportedAction.ACTION_PAGE_DELETE_COMPLETELY : SupportedAction.ACTION_PAGE_DELETE,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 
@@ -1300,9 +1300,9 @@ module.exports = function(crowi, app) {
     result.page = page; // TODO consider to use serializePageSecurely method -- 2018.08.06 Yuki Takei
     result.page = page; // TODO consider to use serializePageSecurely method -- 2018.08.06 Yuki Takei
 
 
     const parameters = {
     const parameters = {
-      targetModel: SUPPORTED_TARGET_MODEL_TYPE.MODEL_PAGE,
+      targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_REVERT,
+      action: SupportedAction.ACTION_PAGE_REVERT,
     };
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
 

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

@@ -1,7 +1,7 @@
 import { subDays } from 'date-fns';
 import { subDays } from 'date-fns';
 import { Types } from 'mongoose';
 import { Types } from 'mongoose';
 
 
-import { AllSupportedActionToNotifiedType, SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { AllSupportedActionToNotified, SupportedAction } from '~/interfaces/activity';
 import { HasObjectId } from '~/interfaces/has-object-id';
 import { HasObjectId } from '~/interfaces/has-object-id';
 import { InAppNotificationStatuses, PaginateResult } from '~/interfaces/in-app-notification';
 import { InAppNotificationStatuses, PaginateResult } from '~/interfaces/in-app-notification';
 import { IPage } from '~/interfaces/page';
 import { IPage } from '~/interfaces/page';
@@ -53,7 +53,7 @@ export default class InAppNotificationService {
   initActivityEventListeners(): void {
   initActivityEventListeners(): void {
     this.activityEvent.on('updated', async(activity: ActivityDocument, target: IPage) => {
     this.activityEvent.on('updated', async(activity: ActivityDocument, target: IPage) => {
       try {
       try {
-        const shouldNotification = activity != null && target != null && (AllSupportedActionToNotifiedType as ReadonlyArray<string>).includes(activity.action);
+        const shouldNotification = activity != null && target != null && (AllSupportedActionToNotified as ReadonlyArray<string>).includes(activity.action);
         if (shouldNotification) {
         if (shouldNotification) {
           await this.createInAppNotification(activity, target);
           await this.createInAppNotification(activity, target);
         }
         }
@@ -200,10 +200,10 @@ export default class InAppNotificationService {
   };
   };
 
 
   createInAppNotification = async function(activity: ActivityDocument, target: IPage): Promise<void> {
   createInAppNotification = async function(activity: ActivityDocument, target: IPage): Promise<void> {
-    const shouldNotification = activity != null && target != null && (AllSupportedActionToNotifiedType as ReadonlyArray<string>).includes(activity.action);
+    const shouldNotification = activity != null && target != null && (AllSupportedActionToNotified as ReadonlyArray<string>).includes(activity.action);
     if (shouldNotification) {
     if (shouldNotification) {
       let mentionedUsers: IUser[] = [];
       let mentionedUsers: IUser[] = [];
-      if (activity.action === SUPPORTED_ACTION_TYPE.ACTION_COMMENT_CREATE) {
+      if (activity.action === SupportedAction.ACTION_COMMENT_CREATE) {
         mentionedUsers = await this.crowi.commentService.getMentionedUsers(activity.event);
         mentionedUsers = await this.crowi.commentService.getMentionedUsers(activity.event);
       }
       }
       const notificationTargetUsers = await activity?.getNotificationTargetUsers();
       const notificationTargetUsers = await activity?.getNotificationTargetUsers();