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

separated createGrowiPagesFromImports

sou 7 лет назад
Родитель
Сommit
4bbc079093
4 измененных файлов с 92 добавлено и 50 удалено
  1. 1 1
      lib/routes/admin.js
  2. 1 1
      lib/routes/index.js
  3. 63 0
      lib/util/createGrowiPagesFromImports.js
  4. 27 48
      lib/util/importer.js

+ 1 - 1
lib/routes/admin.js

@@ -1224,7 +1224,7 @@ module.exports = function(crowi, app) {
     const result = await importer.importPagesFromEsa(user);
 
     if (result.errors) {
-      return res.json({ status: false, message: `${result.errors}` });
+      return res.json({ status: false, message: `<br> - ${result.errors.join('<br> - ')}` });
     }
     return res.json({ status: true });
   };

+ 1 - 1
lib/routes/index.js

@@ -143,7 +143,7 @@ module.exports = function(crowi, app) {
   // importer management for admin
   app.get('/admin/importer'                , loginRequired(crowi, app) , middleware.adminRequired() , admin.importer.index);
   app.post('/_api/admin/settings/importer' , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.importerSetting);
-  app.post('/_api/admin/import/esa'        , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.importDataFromEsa);
+  app.post('/_api/admin/import/esa'        , loginRequired(crowi, app) , middleware.adminRequired() , admin.api.importDataFromEsa);
   app.post('/_api/admin/import/testEsaAPI' , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.testEsaAPI);
 
   app.get('/me'                       , loginRequired(crowi, app) , me.index);

+ 63 - 0
lib/util/createGrowiPagesFromImports.js

@@ -0,0 +1,63 @@
+module.exports = crowi => {
+  'use strict';
+
+  const Page = crowi.model('Page');
+
+  /**
+   * Create posts from imported data
+   * @param pages = [{
+   *    path: String,
+   *    body: String,
+   *    user: Object
+   * }]
+   */
+  const createGrowiPages = (pages) => {
+    let createdPages = [];
+    let rejectedPages = [];
+    let errors = [];
+
+    return new Promise((resolve, reject) => {
+      const promises = pages.map(page => {
+        return new Promise(async(resolve, reject) => {
+          const path = page.path;
+          const user = page.user;
+          const body = page.body;
+          const isCreatableName = await Page.isCreatableName(path);
+          const isPageNameTaken = await Page.findPage(path, user, null, true);
+
+          if (isCreatableName && !isPageNameTaken) {
+            try {
+              await Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
+              createdPages.push(page);
+            }
+            catch (err) {
+              errors.push(err);
+            }
+          }
+          else {
+            rejectedPages.push(page);
+            if (!isCreatableName) {
+              errors.push(new Error(`${path} is not a creatable name in Growi`));
+            }
+            if (isPageNameTaken) {
+              errors.push(new Error(`${path} already exists in Growi`));
+            }
+          }
+
+          resolve();
+        });
+      });
+
+      Promise.all(promises)
+        .then(() => {
+          resolve({
+            createdPages,
+            rejectedPages,
+            errors,
+          });
+        });
+    });
+  };
+
+  return createGrowiPages;
+};

+ 27 - 48
lib/util/importer.js

@@ -5,12 +5,10 @@ module.exports = crowi => {
   'use strict';
 
   const debug = require('debug')('growi:lib:importer');
-  const request = require('request');
   const esa = require('esa-nodejs');
-  const Page = crowi.model('Page');
   const User = crowi.model('User');
-  const pageRouter = require('../routes/page')(crowi);
   const config = crowi.getConfig();
+  const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
   let importer = {};
   let esaClient = {};
 
@@ -30,8 +28,9 @@ module.exports = crowi => {
    */
   importer.importPagesFromEsa = user => {
     return new Promise(async(resolve, reject) => {
-      const data = await getAllDataFromEsa();
-      const result = await createGrowiPages(data.body.posts, user);
+      const rawData = await getAllDataFromEsa();
+      const data = convertEsaDataForGrowi(rawData, user);
+      const result = await createGrowiPages(data, user);
 
       resolve(result);
     });
@@ -53,53 +52,33 @@ module.exports = crowi => {
   };
 
   /**
-   * Create posts from imported data
+   * Convert data into usable format for createGrowiPagesFromImports
    */
-  const createGrowiPages = (pages, user) => {
-    const basePage = '/';
-    let createdPages = [];
-    let rejectedPages = [];
-    let errors = [];
+  const convertEsaDataForGrowi = (rawData, user) => {
+    const basePage = '';
+    const data = rawData.body.posts.map(post => {
+      const category = post.category;
+      const name = post.name;
+      let path = '';
 
-    return new Promise((resolve, reject) => {
-      const promises = pages.map(page => {
-        return new Promise(async(resolve, reject) => {
-          const pagePath = basePage + [page.category, page.name].filter(v => v).join('/');
-          const isCreatableName = await Page.isCreatableName(pagePath);
-          const isPageNameTaken = await Page.findPage(pagePath, user, null, true);
-
-          if (isCreatableName && !isPageNameTaken) {
-            try {
-              await Page.create(pagePath, page.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
-              createdPages.push(page);
-            }
-            catch (err) {
-              errors.push(err);
-            }
-          }
-          else {
-            rejectedPages.push(page);
-            if (!isCreatableName) {
-              errors.push(new Error(`${pagePath} is not a creatable name in Growi`));
-            }
-            if (isPageNameTaken) {
-              errors.push(new Error(`${pagePath} already exists in Growi`));
-            }
-          }
-
-          resolve();
-        });
-      });
+      if (category && name) {
+        path = `${category}/${name}`;
+      }
+      else if (category) {
+        path = category;
+      }
+      else if (name) {
+        path = name;
+      }
 
-      Promise.all(promises)
-      .then(() => {
-        resolve({
-          createdPages,
-          rejectedPages,
-          errors,
-        });
-      });
+      return {
+        path: `${basePage}/${path}`,
+        body: post.body_md,
+        user: user,
+      };
     });
+
+    return data;
   };
 
   /**