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

Merge branch 'master' into imprv/growi_renderer-in-reveal

Yuki Takei пре 7 година
родитељ
комит
3f4af941c4
4 измењених фајлова са 69 додато и 77 уклоњено
  1. 2 1
      CHANGES.md
  2. 37 41
      src/server/models/bookmark.js
  3. 29 34
      src/server/util/createGrowiPagesFromImports.js
  4. 1 1
      src/server/util/search.js

+ 2 - 1
CHANGES.md

@@ -3,7 +3,8 @@ CHANGES
 
 ## 3.3.9
 
-* 
+* Fix: Import from Qiita:Team doesn't work
+    * Introduced by 3.3.0
 
 ## 3.3.8
 

+ 37 - 41
src/server/models/bookmark.js

@@ -2,6 +2,7 @@ module.exports = function(crowi) {
   const debug = require('debug')('growi:models:bookmark');
   const mongoose = require('mongoose');
   const ObjectId = mongoose.Schema.Types.ObjectId;
+  const bookmarkEvent = crowi.event('bookmark');
 
   let bookmarkSchema = null;
 
@@ -79,27 +80,24 @@ module.exports = function(crowi) {
     });
   };
 
-  bookmarkSchema.statics.add = function(page, user) {
+  bookmarkSchema.statics.add = async function(page, user) {
     const Bookmark = this;
 
-    return new Promise(function(resolve, reject) {
-      const newBookmark = new Bookmark;
-
-      newBookmark.page = page;
-      newBookmark.user = user;
-      newBookmark.createdAt = Date.now();
-      newBookmark.save(function(err, bookmark) {
-        debug('Bookmark.save', err, bookmark);
-        if (err) {
-          if (err.code === 11000) { // duplicate key (dummy reesponse of new object)
-            return resolve(newBookmark);
-          }
-          return reject(err);
-        }
-
-        resolve(bookmark);
-      });
-    });
+    const newBookmark = new Bookmark({ page, user, createdAt: Date.now() });
+
+    try {
+      const bookmark = await newBookmark.save();
+      bookmarkEvent.emit('create', page._id);
+      return bookmark;
+    }
+    catch (err) {
+      if (err.code === 11000) {
+        // duplicate key (dummy response of new object)
+        return newBookmark;
+      }
+      debug('Bookmark.save failed', err);
+      throw err;
+    }
   };
 
   /**
@@ -107,34 +105,32 @@ module.exports = function(crowi) {
    * used only when removing the page
    * @param {string} pageId
    */
-  bookmarkSchema.statics.removeBookmarksByPageId = function(pageId) {
+  bookmarkSchema.statics.removeBookmarksByPageId = async function(pageId) {
     const Bookmark = this;
 
-    return new Promise(function(resolve, reject) {
-      Bookmark.remove({page: pageId}, function(err, data) {
-        if (err) {
-          debug('Bookmark.remove failed (removeBookmarkByPage)', err);
-          return reject(err);
-        }
-
-        return resolve(data);
-      });
-    });
+    try {
+      const data = await Bookmark.remove({ page: pageId });
+      bookmarkEvent.emit('delete', pageId);
+      return data;
+    }
+    catch (err) {
+      debug('Bookmark.remove failed (removeBookmarkByPage)', err);
+      throw err;
+    }
   };
 
-  bookmarkSchema.statics.removeBookmark = function(page, user) {
+  bookmarkSchema.statics.removeBookmark = async function(page, user) {
     const Bookmark = this;
 
-    return new Promise(function(resolve, reject) {
-      Bookmark.findOneAndRemove({page: page, user: user}, function(err, data) {
-        if (err) {
-          debug('Bookmark.findOneAndRemove failed', err);
-          return reject(err);
-        }
-
-        return resolve(data);
-      });
-    });
+    try {
+      const data = await Bookmark.findOneAndRemove({ page, user });
+      bookmarkEvent.emit('delete', page);
+      return data;
+    }
+    catch (err) {
+      debug('Bookmark.findOneAndRemove failed', err);
+      throw err;
+    }
   };
 
   return mongoose.model('Bookmark', bookmarkSchema);

+ 29 - 34
src/server/util/createGrowiPagesFromImports.js

@@ -11,44 +11,39 @@ module.exports = crowi => {
    *    user: Object
    * }]
    */
-  const createGrowiPages = (pages) => {
-    let errors = [];
+  const createGrowiPages = async(pages) => {
+    const promises = [];
+    const 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);
+    for (let page of pages) {
+      const path = page.path;
+      const user = page.user;
+      const body = page.body;
+      const isCreatableName = await Page.isCreatableName(path);
+      const isPageNameTaken = await Page.findByPathAndViewer(path, user);
 
-          if (isCreatableName && !isPageNameTaken) {
-            try {
-              await Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
-            }
-            catch (err) {
-              errors.push(err);
-            }
-          }
-          else {
-            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`));
-            }
-          }
+      if (isCreatableName && !isPageNameTaken) {
+        try {
+          const promise = Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
+          promises.push(promise);
+        }
+        catch (err) {
+          errors.push(err);
+        }
+      }
+      else {
+        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();
-        });
-      });
+    await Promise.all(promises);
 
-      Promise.all(promises)
-        .then(() => {
-          resolve(errors);
-        });
-    });
+    return errors;
   };
 
   return createGrowiPages;

+ 1 - 1
src/server/util/search.js

@@ -786,7 +786,7 @@ SearchClient.prototype.syncPageDeleted = function(page, user) {
 SearchClient.prototype.syncBookmarkChanged = async function(pageId) {
   const Page = this.crowi.model('Page');
   const Bookmark = this.crowi.model('Bookmark');
-  const page = await Page.findPageById(pageId);
+  const page = await Page.findById(pageId);
   const bookmarkCount = await Bookmark.countByPageId(pageId);
 
   page.bookmarkCount = bookmarkCount;