Browse Source

fix remove method

yusuketk 7 năm trước cách đây
mục cha
commit
65a765f764

+ 29 - 5
src/server/models/page-tag-relation.js

@@ -106,6 +106,27 @@ class PageTagRelation {
     });
     });
   }
   }
 
 
+  /**
+   * find all page relate tag
+   *
+   * @static
+   * @param {tag} tag
+   * @returns {ObjectId}
+   * @memberof PageTagRelation
+   */
+  static findAllPageIdForTag(tag) {
+    return new Promise((resolve, reject) => {
+      this.find({
+        relatedTag: tag._id
+      }, function(err, relations) {
+        if (err) {
+          reject(err);
+        }
+        resolve(relations.map(rel => rel.relatedPage));
+      });
+    });
+  }
+
   // /**
   // /**
   //  * find all user and group relation of UserGroups
   //  * find all user and group relation of UserGroups
   //  *
   //  *
@@ -300,11 +321,14 @@ class PageTagRelation {
    * @returns {Promise<any>}
    * @returns {Promise<any>}
    * @memberof PageTagRelation
    * @memberof PageTagRelation
    */
    */
-  static removeByTagId(tagId) {
-    return this.remove({relatedTag: tagId}, function(err, removedData) {
-      if (err) {
-        throw new Error('PageTagRelation data is not exists. tag_id:', tagId);
-      }
+  static removeByEachId(pageId, tagId) {
+    return new Promise((resolve, reject) => {
+      this.remove({relatedPage: pageId, relatedTag: tagId}, function(err, removedData) {
+        if (err) {
+          reject(err);
+        }
+        resolve();
+      });
     });
     });
   }
   }
 
 

+ 5 - 4
src/server/routes/page.js

@@ -108,16 +108,17 @@ module.exports = function(crowi, app) {
   }
   }
 
 
   async function updateTags(page, user, newTags, updateOrCreate, previousRevision) {
   async function updateTags(page, user, newTags, updateOrCreate, previousRevision) {
-    const setTagList = ['On-On', 'Off-On']; // [TODO] listing requested Tags on client side
+    const setTagList = [newTags]; // [TODO] listing requested Tags on client side
     const relatedTagIdList = await PageTagRelation.findAllTagIdForPage(page);
     const relatedTagIdList = await PageTagRelation.findAllTagIdForPage(page);
     Promise.all(relatedTagIdList.map(async id => {
     Promise.all(relatedTagIdList.map(async id => {
       return await Tag.getOneById(id);
       return await Tag.getOneById(id);
     })
     })
     ).then(tags => {
     ).then(tags => {
-      const relatedTagList = tags.map(relatedTag => {
+      const relatedTagList = tags.map(async relatedTag => {
         if (!setTagList.includes(relatedTag.name)) {
         if (!setTagList.includes(relatedTag.name)) {
-          PageTagRelation.removeByTagId(relatedTag._id);
-          if (!PageTagRelation.findAllPageForTag) {
+          await PageTagRelation.removeByEachId(page._id, relatedTag._id);
+          const pagesRelateTag = await PageTagRelation.findAllPageIdForTag(relatedTag);
+          if (pagesRelateTag.length == 0) {
             Tag.removeById(relatedTag._id);
             Tag.removeById(relatedTag._id);
           }
           }
           return;
           return;