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

Merge pull request #1510 from weseek/create-apiV3-add-user-notification

Create api v3 add user notification
itizawa 6 лет назад
Родитель
Сommit
d98ee6be32

+ 4 - 1
src/client/js/services/AdminNotificationContainer.js

@@ -84,7 +84,10 @@ export default class AdminNotificationContainer extends Container {
    * @memberOf SlackAppConfiguration
    * @memberOf SlackAppConfiguration
    */
    */
   async addNotificationPattern(pathPattern, channel) {
   async addNotificationPattern(pathPattern, channel) {
-    // TODO GW-802 create apiV3 addNotificationPattern
+    return this.appContainer.apiv3.post('/notification-setting/user-notification', {
+      pathPattern,
+      channel,
+    });
   }
   }
 
 
 }
 }

+ 0 - 22
src/server/routes/admin.js

@@ -852,28 +852,6 @@ module.exports = function(crowi, app) {
     return res.json({ status: true });
     return res.json({ status: true });
   };
   };
 
 
-
-  // app.post('/_api/admin/notifications.add'    , admin.api.notificationAdd);
-  actions.api.notificationAdd = function(req, res) {
-    const UpdatePost = crowi.model('UpdatePost');
-    const pathPattern = req.body.pathPattern;
-    const channel = req.body.channel;
-
-    debug('notification.add', pathPattern, channel);
-    UpdatePost.create(pathPattern, channel, req.user)
-      .then((doc) => {
-        debug('Successfully save updatePost', doc);
-
-        // fixme: うーん
-        doc.creator = doc.creator._id.toString();
-        return res.json(ApiResponse.success({ updatePost: doc }));
-      })
-      .catch((err) => {
-        debug('Failed to save updatePost', err);
-        return res.json(ApiResponse.error());
-      });
-  };
-
   // app.post('/_api/admin/notifications.remove' , admin.api.notificationRemove);
   // app.post('/_api/admin/notifications.remove' , admin.api.notificationRemove);
   actions.api.notificationRemove = function(req, res) {
   actions.api.notificationRemove = function(req, res) {
     const UpdatePost = crowi.model('UpdatePost');
     const UpdatePost = crowi.model('UpdatePost');

+ 52 - 2
src/server/routes/apiv3/notification-setting.js

@@ -13,9 +13,13 @@ const ErrorV3 = require('../../models/vo/error-apiv3');
 
 
 const validator = {
 const validator = {
   slackConfiguration: [
   slackConfiguration: [
-    body('webhookUrl').isString(),
+    body('webhookUrl').isString().trim(),
     body('isIncomingWebhookPrioritized').isBoolean(),
     body('isIncomingWebhookPrioritized').isBoolean(),
-    body('slackToken').isString(),
+    body('slackToken').isString().trim(),
+  ],
+  userNotification: [
+    body('pathPattern').isString().trim(),
+    body('channel').isString().trim(),
   ],
   ],
 };
 };
 
 
@@ -42,6 +46,15 @@ const validator = {
  *          slackToken:
  *          slackToken:
  *            type: string
  *            type: string
  *            description: OAuth access token
  *            description: OAuth access token
+ *      UserNotificationParams:
+ *        type: object
+ *        properties:
+ *          pathPattern:
+ *            type: string
+ *            description: path name of wiki
+ *          channel:
+ *            type: string
+ *            description: slack channel name without '#'
  */
  */
 module.exports = (crowi) => {
 module.exports = (crowi) => {
   const loginRequiredStrictly = require('../../middleware/login-required')(crowi);
   const loginRequiredStrictly = require('../../middleware/login-required')(crowi);
@@ -97,6 +110,43 @@ module.exports = (crowi) => {
 
 
   });
   });
 
 
+  /**
+  * @swagger
+  *
+  *    /notification-setting/user-notification:
+  *      put:
+  *        tags: [NotificationSetting]
+  *        description: add user notification setting
+  *        requestBody:
+  *          required: true
+  *          content:
+  *            application/json:
+  *              schema:
+  *                $ref: '#/components/schemas/UserNotificationParams'
+  *        responses:
+  *          200:
+  *            description: Succeeded to add user notification setting
+  *            content:
+  *              application/json:
+  *                schema:
+  *                  $ref: '#/components/schemas/UserNotificationParams'
+  */
+  router.post('/user-notification', loginRequiredStrictly, adminRequired, csrf, validator.userNotification, ApiV3FormValidator, async(req, res) => {
+    const { pathPattern, channel } = req.body;
+    const UpdatePost = crowi.model('UpdatePost');
+
+    try {
+      logger.info('notification.add', pathPattern, channel);
+      const params = await UpdatePost.create(pathPattern, channel, req.user);
+      return res.apiv3({ params });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating user notification';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-userNotification-failed'));
+    }
+
+  });
 
 
   return router;
   return router;
 };
 };

+ 0 - 1
src/server/routes/index.js

@@ -106,7 +106,6 @@ module.exports = function(crowi, app) {
   app.post('/admin/notification/slackSetting', loginRequiredStrictly , adminRequired , csrf, form.admin.slackSetting, admin.notification.slackSetting);
   app.post('/admin/notification/slackSetting', loginRequiredStrictly , adminRequired , csrf, form.admin.slackSetting, admin.notification.slackSetting);
   app.get('/admin/notification/slackAuth'    , loginRequiredStrictly , adminRequired , admin.notification.slackAuth);
   app.get('/admin/notification/slackAuth'    , loginRequiredStrictly , adminRequired , admin.notification.slackAuth);
   app.get('/admin/notification/slackSetting/disconnect', loginRequiredStrictly , adminRequired , admin.notification.disconnectFromSlack);
   app.get('/admin/notification/slackSetting/disconnect', loginRequiredStrictly , adminRequired , admin.notification.disconnectFromSlack);
-  app.post('/_api/admin/notification.add'    , loginRequiredStrictly , adminRequired , csrf, admin.api.notificationAdd);
   app.post('/_api/admin/notification.remove' , loginRequiredStrictly , adminRequired , csrf, admin.api.notificationRemove);
   app.post('/_api/admin/notification.remove' , loginRequiredStrictly , adminRequired , csrf, admin.api.notificationRemove);
   app.get('/_api/admin/users.search'         , loginRequiredStrictly , adminRequired , admin.api.usersSearch);
   app.get('/_api/admin/users.search'         , loginRequiredStrictly , adminRequired , admin.api.usersSearch);
   app.get('/admin/global-notification/new'   , loginRequiredStrictly , adminRequired , admin.globalNotification.detail);
   app.get('/admin/global-notification/new'   , loginRequiredStrictly , adminRequired , admin.globalNotification.detail);