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

WIP: refactor models/page.js

* fix api.get and api.seen
Yuki Takei пре 7 година
родитељ
комит
a74e870ed8
2 измењених фајлова са 38 додато и 48 уклоњено
  1. 11 24
      src/server/models/page.js
  2. 27 24
      src/server/routes/page.js

+ 11 - 24
src/server/models/page.js

@@ -218,38 +218,25 @@ module.exports = function(crowi) {
   };
 
   pageSchema.methods.isSeenUser = function(userData) {
-    var self = this,
-      Page = self;
-
-    return this.seenUsers.some(function(seenUser) {
-      return seenUser.equals(userData._id);
-    });
+    return this.seenUsers.includes(userData._id);
   };
 
-  pageSchema.methods.seen = function(userData) {
-    var self = this,
-      Page = self;
-
+  pageSchema.methods.seen = async function(userData) {
     if (this.isSeenUser(userData)) {
       debug('seenUsers not updated');
-      return Promise.resolve(this);
+      return this;
     }
 
-    return new Promise(function(resolve, reject) {
-      if (!userData || !userData._id) {
-        reject(new Error('User data is not valid'));
-      }
+    if (!userData || !userData._id) {
+      throw new Error('User data is not valid');
+    }
 
-      var added = self.seenUsers.addToSet(userData);
-      self.save(function(err, data) {
-        if (err) {
-          return reject(err);
-        }
+    const added = this.seenUsers.addToSet(userData);
+    const saved = await this.save();
 
-        debug('seenUsers updated!', added);
-        return resolve(self);
-      });
-    });
+    debug('seenUsers updated!', added);
+
+    return saved;
   };
 
   pageSchema.methods.getSlackChannel = function() {

+ 27 - 24
src/server/routes/page.js

@@ -906,7 +906,7 @@ module.exports = function(crowi, app) {
    * @apiParam {String} path
    * @apiParam {String} revision_id
    */
-  api.get = function(req, res) {
+  api.get = async function(req, res) {
     const pagePath = req.query.path || null;
     const pageId = req.query.page_id || null; // TODO: handling
     const revisionId = req.query.revision_id || null;
@@ -915,22 +915,23 @@ module.exports = function(crowi, app) {
       return res.json(ApiResponse.error(new Error('Parameter path or page_id is required.')));
     }
 
-    let pageFinder;
-    if (pageId) { // prioritized
-      pageFinder = Page.findPageByIdAndGrantedUser(pageId, req.user);
+    let page;
+    try {
+      if (pageId) { // prioritized
+        page = await Page.findOneByIdAndViewer(pageId, req.user);
+      }
+      else if (pagePath) {
+        page = await Page.findPage(pagePath, req.user, revisionId);
+      }
     }
-    else if (pagePath) {
-      pageFinder = Page.findPage(pagePath, req.user, revisionId);
+    catch (err) {
+      return res.json(ApiResponse.error(err));
     }
 
-    pageFinder.then(function(pageData) {
-      const result = {};
-      result.page = pageData;   // TODO consider to use serializeToObj method -- 2018.08.06 Yuki Takei
+    const result = {};
+    result.page = page;   // TODO consider to use serializeToObj method -- 2018.08.06 Yuki Takei
 
-      return res.json(ApiResponse.success(result));
-    }).catch(function(err) {
-      return res.json(ApiResponse.error(err));
-    });
+    return res.json(ApiResponse.success(result));
   };
 
   /**
@@ -940,24 +941,26 @@ module.exports = function(crowi, app) {
    *
    * @apiParam {String} page_id Page Id.
    */
-  api.seen = function(req, res) {
+  api.seen = async function(req, res) {
     const pageId = req.body.page_id;
     if (!pageId) {
       return res.json(ApiResponse.error('page_id required'));
     }
 
-    Page.findPageByIdAndGrantedUser(pageId, req.user)
-    .then(function(page) {
-      return page.seen(req.user);
-    }).then(function(user) {
-      const result = {};
-      result.seenUser = user;
-
-      return res.json(ApiResponse.success(result));
-    }).catch(function(err) {
+    let page;
+    try {
+      page = await Page.findOneByIdAndViewer(pageId, req.user);
+      page = await page.seen(req.user);
+    }
+    catch (err) {
       debug('Seen user update error', err);
       return res.json(ApiResponse.error(err));
-    });
+    }
+
+    const result = {};
+    result.seenUser = page.seenUsers;
+
+    return res.json(ApiResponse.success(result));
   };
 
   /**