Jelajahi Sumber

createGrowiPages returns {createdPages, rejectedPages, errors}

sou 7 tahun lalu
induk
melakukan
aa07374d2c
1 mengubah file dengan 32 tambahan dan 21 penghapusan
  1. 32 21
      lib/util/importer.js

+ 32 - 21
lib/util/importer.js

@@ -61,31 +61,42 @@ module.exports = crowi => {
    * Create posts from imported data
    */
   const createGrowiPages = (pages, user) => {
+    const basePage = '/';
+    let createdPages = [];
+    let rejectedPages = [];
+    let errors = [];
+
     return new Promise((resolve, reject) => {
-      const basePage = '/';
-      const ignoreNotFound = true;
-      pages.forEach(post => {
-        const pagePath = basePage + [post.category, post.name].filter(v => v).join('/');
-        Page.findPage(pagePath, user, null, ignoreNotFound)
-        .then(data => {
-          if (data !== null) {
-            return reject('Page exists');
-          }
-          if (!Page.isCreatableName(pagePath)) {
-            return reject(`Page name '${pagePath}' is not allowed in Growi`);
+      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) {
+            await Page.create(pagePath, page.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
+            createdPages.push(page);
           }
-          return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
-        })
-        .then(createdPage => {
-          if (!createdPage) {
-            return reject('Page exists');
+          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`));
+            }
           }
-          debug('Crete page: ' + createdPage);
+
           resolve();
-        })
-        .catch(err => {
-          debug(err);
-          return reject(err);
+        });
+      });
+
+      Promise.all(promises)
+      .then(() => {
+        resolve({
+          createdPages,
+          rejectedPages,
+          errors,
         });
       });
     });