Explorar o código

Merge pull request #1347 from weseek/create-apiV3-update-function

Create api v3 update function
itizawa %!s(int64=6) %!d(string=hai) anos
pai
achega
c722961784

+ 8 - 1
src/client/js/services/AdminCustomizeContainer.js

@@ -116,7 +116,14 @@ export default class AdminCustomizeContainer extends Container {
    * @return {string} Functions
    */
   async updateCustomizeFunction() {
-    // TODO GW-506 create apiV3
+    const response = await this.appContainer.apiv3.put('/customize-setting/function', {
+      isEnabledTimeline: this.state.isEnabledTimeline,
+      isSavedStatesOfTabChanges: this.state.isSavedStatesOfTabChanges,
+      isEnabledAttachTitleHeader: this.state.isEnabledAttachTitleHeader,
+      recentCreatedLimit: this.state.currentRecentCreatedLimit,
+    });
+    const { customizedParams } = response.data;
+    return customizedParams;
   }
 
 }

+ 71 - 8
src/server/routes/apiv3/customize-setting.js

@@ -25,10 +25,22 @@ module.exports = (crowi) => {
 
   const { ApiV3FormValidator } = crowi.middlewares;
 
-  validator.layoutTheme = [
-    body('layoutType').isString(),
-    body('themeType').isString(),
-  ];
+  // TODO GW-533 implement accurate validation
+  const validator = {
+    layoutTheme: [
+      body('layoutType').isString(),
+      body('themeType').isString(),
+    ],
+    behavior: [
+      body('behaviorType').isString(),
+    ],
+    function: [
+      body('isEnabledTimeline').isBoolean(),
+      body('isSavedStatesOfTabChanges').isBoolean(),
+      body('isEnabledAttachTitleHeader').isBoolean(),
+      body('recentCreatedLimit').isInt(),
+    ],
+  };
 
   /**
    * @swagger
@@ -75,10 +87,6 @@ module.exports = (crowi) => {
     }
   });
 
-  validator.behavior = [
-    body('behaviorType').isString(),
-  ];
-
   /**
    * @swagger
    *
@@ -119,5 +127,60 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *    /customize-setting/function:
+   *      put:
+   *        tags: [CustomizeSetting]
+   *        description: Update function
+   *        requestBody:
+   *          required: true
+   *          content:
+   *            application/json:
+   *              schama:
+   *                type: object
+   *                properties:
+   *                  isEnabledTimeline:
+   *                    description: is enabled timeline
+   *                    type: boolean
+   *                  isSavedStatesOfTabChanges:
+   *                    description: is saved states of tabChanges
+   *                    type: boolean
+   *                  isEnabledAttachTitleHeader:
+   *                    description: is enabled attach titleHeader
+   *                    type: boolean
+   *                  recentCreatedLimit:
+   *                    description: limit of recent created
+   *                    type: number
+   *      responses:
+   *          200:
+   *            description: Succeeded to update function
+   */
+  router.put('/function', loginRequiredStrictly, adminRequired, csrf, validator.function, ApiV3FormValidator, async(req, res) => {
+    const requestParams = {
+      'customize:isEnabledTimeline': req.body.isEnabledTimeline,
+      'customize:isSavedStatesOfTabChanges': req.body.isSavedStatesOfTabChanges,
+      'customize:isEnabledAttachTitleHeader': req.body.isEnabledAttachTitleHeader,
+      'customize:showRecentCreatedNumber': req.body.recentCreatedLimit,
+    };
+
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
+      const customizedParams = {
+        isEnabledTimeline: await crowi.configManager.getConfig('crowi', 'customize:isEnabledTimeline'),
+        isSavedStatesOfTabChanges: await crowi.configManager.getConfig('crowi', 'customize:isSavedStatesOfTabChanges'),
+        isEnabledAttachTitleHeader: await crowi.configManager.getConfig('crowi', 'customize:isEnabledAttachTitleHeader'),
+        recentCreatedLimit: await crowi.configManager.getConfig('crowi', 'customize:showRecentCreatedNumber'),
+      };
+      return res.apiv3({ customizedParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating function';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-function-failed'));
+    }
+  });
+
   return router;
 };