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

"SUPPORTED_ACTION_TYPE" -> "SupportedAction"

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

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

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

+ 3 - 3
packages/app/src/interfaces/activity.ts

@@ -44,7 +44,7 @@ export const SupportedEventModel = {
   MODEL_COMMENT,
 } as const;
 
-export const SUPPORTED_ACTION_TYPE = {
+export const SupportedAction = {
   ACTION_UNSETTLED,
   ACTION_REGISTRATION_SUCCESS,
   ACTION_LOGIN_SUCCESS,
@@ -112,7 +112,7 @@ export const CommentActions = Object.values({
  */
 export const AllSupportedTargetModel = Object.values(SupportedTargetModel);
 export const AllSupportedEventModel = Object.values(SupportedEventModel);
-export const AllSupportedActionType = Object.values(SUPPORTED_ACTION_TYPE);
+export const AllSupportedAction = Object.values(SupportedAction);
 export const AllSupportedActionToNotifiedType = Object.values(SUPPORTED_ACTION_TO_NOTIFIED_TYPE);
 
 /*
@@ -120,7 +120,7 @@ export const AllSupportedActionToNotifiedType = Object.values(SUPPORTED_ACTION_T
  */
 export type SupportedTargetModelType = typeof SupportedTargetModel[keyof typeof SupportedTargetModel];
 export type SupportedEventModelType = typeof SupportedEventModel[keyof typeof SupportedEventModel];
-export type SupportedActionType = typeof SUPPORTED_ACTION_TYPE[keyof typeof SUPPORTED_ACTION_TYPE];
+export type SupportedActionType = typeof SupportedAction[keyof typeof SupportedAction];
 
 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 { SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedAction } from '~/interfaces/activity';
 import { IUserHasId } from '~/interfaces/user';
 import loggerFactory from '~/utils/logger';
 
@@ -15,7 +15,7 @@ export const generateAddActivityMiddleware = crowi => async(req: AuthorizedReque
   const parameter = {
     ip:  req.ip,
     endpoint: req.originalUrl,
-    action: SUPPORTED_ACTION_TYPE.ACTION_UNSETTLED,
+    action: SupportedAction.ACTION_UNSETTLED,
     user: req.user?._id,
     snapshot: {
       username: req.user?.username,

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

@@ -5,7 +5,7 @@ import {
 import mongoosePaginate from 'mongoose-paginate-v2';
 
 import {
-  ISnapshot, AllSupportedActionType, SupportedActionType,
+  ISnapshot, AllSupportedAction, SupportedActionType,
   AllSupportedTargetModel, SupportedTargetModelType,
   AllSupportedEventModel, SupportedEventModelType,
 } from '~/interfaces/activity';
@@ -70,7 +70,7 @@ const activitySchema = new Schema<ActivityDocument, ActivityModel>({
   },
   action: {
     type: String,
-    enum: AllSupportedActionType,
+    enum: AllSupportedAction,
     required: true,
   },
   snapshot: snapshotSchema,

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

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

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

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

@@ -1,4 +1,4 @@
-import { SUPPORTED_ACTION_TYPE, SupportedTargetModel } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import loggerFactory from '~/utils/logger';
 
@@ -313,7 +313,7 @@ module.exports = (crowi) => {
     const parameters = {
       targetModel: SupportedTargetModel.MODEL_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);
 

+ 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 loggerFactory from '~/utils/logger';
 
@@ -17,7 +17,7 @@ module.exports = (crowi) => {
     req.session.destroy();
 
     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);
 
     return res.send();

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

@@ -1,6 +1,6 @@
 import { pagePathUtils } from '@growi/core';
 
-import { SUPPORTED_ACTION_TYPE, SupportedTargetModel } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { AllSubscriptionStatusType } from '~/interfaces/subscription';
 import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity';
 import Subscription from '~/server/models/subscription';
@@ -340,7 +340,7 @@ module.exports = (crowi) => {
     const parameters = {
       targetModel: SupportedTargetModel.MODEL_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);
 

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

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

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

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

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

@@ -1,5 +1,5 @@
 
-import { SUPPORTED_ACTION_TYPE, SupportedTargetModel, SupportedEventModel } from '~/interfaces/activity';
+import { SupportedAction, SupportedTargetModel, SupportedEventModel } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 
 /**
@@ -266,7 +266,7 @@ module.exports = function(crowi, app) {
       target: page,
       eventModel: SupportedEventModel.MODEL_COMMENT,
       event: createdComment,
-      action: SUPPORTED_ACTION_TYPE.ACTION_COMMENT_CREATE,
+      action: SupportedAction.ACTION_COMMENT_CREATE,
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 
@@ -398,7 +398,7 @@ module.exports = function(crowi, app) {
       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);
 
     res.json(ApiResponse.success({ comment: updatedComment }));
@@ -480,7 +480,7 @@ module.exports = function(crowi, app) {
       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);
 
     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 { InstallerService, FailedToCreateAdminUserError } from '../service/installer';
@@ -59,7 +59,7 @@ module.exports = function(crowi) {
 
       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);
 
       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 loggerFactory from '~/utils/logger';
 
@@ -33,7 +33,7 @@ module.exports = function(crowi, app) {
     // remove 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);
 
     return res.safeRedirect(redirectTo);
@@ -47,7 +47,7 @@ module.exports = function(crowi, app) {
   const loginFailureHandler = async(req, res, message) => {
     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);
 
     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';
 // disable all of linting
 // because this file is a deprecated legacy of Crowi
@@ -40,7 +40,7 @@ module.exports = function(crowi, app) {
       // remove 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);
 
       return res.safeRedirect(redirectTo);

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

@@ -3,7 +3,7 @@ import { body } from 'express-validator';
 import mongoose from 'mongoose';
 import urljoin from 'url-join';
 
-import { SupportedTargetModel, SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { SupportedTargetModel, SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 
 import { PathAlreadyExistsError } from '../models/errors';
@@ -406,7 +406,7 @@ module.exports = function(crowi, app) {
 
     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);
 
     return res.render(view, renderVars);
@@ -470,7 +470,7 @@ module.exports = function(crowi, app) {
 
     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);
 
     return res.render(view, renderVars);
@@ -651,7 +651,7 @@ module.exports = function(crowi, app) {
   actions.redirector = async function(req, res, next) {
     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);
 
     return redirector(req, res, next, path);
@@ -661,7 +661,7 @@ module.exports = function(crowi, app) {
     const _path = getPathFromRequest(req);
     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);
 
     return redirector(req, res, next, path);
@@ -1002,7 +1002,7 @@ module.exports = function(crowi, app) {
     const parameters = {
       targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_UPDATE,
+      action: SupportedAction.ACTION_PAGE_UPDATE,
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
   };
@@ -1244,7 +1244,7 @@ module.exports = function(crowi, app) {
     const parameters = {
       targetModel: SupportedTargetModel.MODEL_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);
 
@@ -1302,7 +1302,7 @@ module.exports = function(crowi, app) {
     const parameters = {
       targetModel: SupportedTargetModel.MODEL_PAGE,
       target: page,
-      action: SUPPORTED_ACTION_TYPE.ACTION_PAGE_REVERT,
+      action: SupportedAction.ACTION_PAGE_REVERT,
     };
     activityEvent.emit('update', res.locals.activity._id, parameters, page);
 

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

@@ -1,7 +1,7 @@
 import { subDays } from 'date-fns';
 import { Types } from 'mongoose';
 
-import { AllSupportedActionToNotifiedType, SUPPORTED_ACTION_TYPE } from '~/interfaces/activity';
+import { AllSupportedActionToNotifiedType, SupportedAction } from '~/interfaces/activity';
 import { HasObjectId } from '~/interfaces/has-object-id';
 import { InAppNotificationStatuses, PaginateResult } from '~/interfaces/in-app-notification';
 import { IPage } from '~/interfaces/page';
@@ -203,7 +203,7 @@ export default class InAppNotificationService {
     const shouldNotification = activity != null && target != null && (AllSupportedActionToNotifiedType as ReadonlyArray<string>).includes(activity.action);
     if (shouldNotification) {
       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);
       }
       const notificationTargetUsers = await activity?.getNotificationTargetUsers();