Преглед изворни кода

create inAppNotificationSettingsService

Shun Miyazawa пре 4 година
родитељ
комит
7466746881

+ 9 - 0
packages/app/src/server/crowi/index.js

@@ -69,6 +69,7 @@ function Crowi() {
   this.interceptorManager = new InterceptorManager();
   this.slackIntegrationService = null;
   this.inAppNotificationService = null;
+  this.inAppNotificationSettingsService = null;
   this.activityService = null;
   this.commentService = null;
   this.xss = new Xss();
@@ -129,6 +130,7 @@ Crowi.prototype.init = async function() {
     this.setupImport(),
     this.setupPageService(),
     this.setupInAppNotificationService(),
+    this.setupInAppNotificationSettingsService(),
     this.setupActivityService(),
     this.setupCommentService(),
     this.setupSyncPageStatusService(),
@@ -686,6 +688,13 @@ Crowi.prototype.setupInAppNotificationService = async function() {
   }
 };
 
+Crowi.prototype.setupInAppNotificationSettingsService = async function() {
+  const InAppNotificationSettingsService = require('../service/in-app-notification-settings');
+  if (this.inAppNotificationSettingsService == null) {
+    this.inAppNotificationSettingsService = new InAppNotificationSettingsService(this);
+  }
+};
+
 Crowi.prototype.setupActivityService = async function() {
   const ActivityService = require('../service/activity');
   if (this.activityService == null) {

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

@@ -1,8 +1,6 @@
 import { pagePathUtils } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 
-import Subscription, { STATUS_SUBSCRIBE } from '~/server/models/subscription';
-import InAppNotificationSettings from '~/server/models/in-app-notification-settings';
 import { subscribeRuleNames } from '~/interfaces/in-app-notification-settings';
 
 const logger = loggerFactory('growi:routes:apiv3:pages'); // eslint-disable-line no-unused-vars
@@ -324,15 +322,7 @@ module.exports = (crowi) => {
 
     // create subscription
     try {
-      const query = { userId: req.user.id };
-      const inAppNotificationSettings = await InAppNotificationSettings.findOne(query);
-      if (inAppNotificationSettings != null) {
-        const targetRuleName = subscribeRuleNames.PAGE_CREATE;
-        const subscribeRule = inAppNotificationSettings.subscribeRules.find(subscribeRule => subscribeRule.name === targetRuleName);
-        if (subscribeRule.isEnabled) {
-          await Subscription.subscribeByPageId(req.user._id, createdPage._id, STATUS_SUBSCRIBE);
-        }
-      }
+      await crowi.inAppNotificationSettingsService.createSubscription(req.user.id, createdPage._id, subscribeRuleNames.PAGE_CREATE);
     }
     catch (err) {
       logger.error('Failed to create subscription document', err);

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

@@ -0,0 +1,30 @@
+import InAppNotificationSettings from '~/server/models/in-app-notification-settings';
+import Subscription, { STATUS_SUBSCRIBE } from '~/server/models/subscription';
+
+import Crowi from '../crowi';
+
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:service:inAppNotificationSettings');
+
+export default class InAppNotificationSettingsService {
+
+  crowi!: Crowi;
+
+  constructor(crowi: Crowi) {
+    this.crowi = crowi;
+  }
+
+  createSubscription = async(userId, pageId, targetRuleName) => {
+    const inAppNotificationSettings = await InAppNotificationSettings.findOne({ userId });
+    if (inAppNotificationSettings != null) {
+      const subscribeRule = inAppNotificationSettings.subscribeRules.find(subscribeRule => subscribeRule.name === targetRuleName);
+      if (subscribeRule.isEnabled) {
+        await Subscription.subscribeByPageId(userId, pageId, STATUS_SUBSCRIBE);
+      }
+    }
+  };
+
+}
+
+module.exports = InAppNotificationSettingsService;