Browse Source

remove page tag relation don't exist tag form

yusuketk 7 years ago
parent
commit
76b628aedb
2 changed files with 64 additions and 36 deletions
  1. 40 24
      src/server/models/page-tag-relation.js
  2. 24 12
      src/server/routes/page.js

+ 40 - 24
src/server/models/page-tag-relation.js

@@ -278,40 +278,56 @@ class PageTagRelation {
     });
   }
 
+  // /**
+  //  * remove all relation for Page
+  //  *
+  //  * @static
+  //  * @param {Page} page related page for remove
+  //  * @returns {Promise<any>}
+  //  * @memberof PageTagRelation
+  //  */
+  // static removeAllByPage(page) {
+  //   return this.deleteMany({
+  //     relatedPage: page
+  //   });
+  // }
+
   /**
-   * remove all relation for Page
+   * remove relation by id
    *
    * @static
-   * @param {Page} page related page for remove
+   * @param {ObjectId} id
    * @returns {Promise<any>}
    * @memberof PageTagRelation
    */
-  static removeAllByPage(page) {
-    return this.deleteMany({
-      relatedPage: page
+  static removeByTagId(tagId) {
+    return this.remove({relatedTag: tagId}, function(err, removedData) {
+      if (err) {
+        throw new Error('PageTagRelation data is not exists. tag_id:', tagId);
+      }
     });
   }
 
-  /**
-   * remove relation by id
-   *
-   * @static
-   * @param {ObjectId} id
-   * @returns {Promise<any>}
-   * @memberof UserGroupRelation
-   */
-  static removeById(id) {
+  // /**
+  //  * remove relation by id
+  //  *
+  //  * @static
+  //  * @param {ObjectId} id
+  //  * @returns {Promise<any>}
+  //  * @memberof UserGroupRelation
+  //  */
+  // static removeById(id) {
 
-    return this.findById(id)
-      .then((relationData) => {
-        if (relationData == null) {
-          throw new Error('PageTagRelation data is not exists. id:', id);
-        }
-        else {
-          relationData.remove();
-        }
-      });
-  }
+  //   return this.findById(id)
+  //     .then((relationData) => {
+  //       if (relationData == null) {
+  //         throw new Error('PageTagRelation data is not exists. id:', id);
+  //       }
+  //       else {
+  //         relationData.remove();
+  //       }
+  //     });
+  // }
 
 }
 

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

@@ -107,21 +107,33 @@ module.exports = function(crowi, app) {
     }
   }
 
-  async function updateTags(page, user, pageTags, updateOrCreate, previousRevision) {
+  async function updateTags(page, user, newTags, updateOrCreate, previousRevision) {
     // if (pageTags == null) {
     //   Tag.removeTagById(tag.id);
     // }
-    const relatedTags = await PageTagRelation.findAllTagForPage(page);
-    Tag.find({name: pageTags}, async function(err, tag) {
-      let settingTag;
-      if (tag.length == 0) {
-        settingTag = await Tag.createTag(pageTags);
-      }
-      else {
-        settingTag = tag[0];
-      }
-      // Relation を作成
-      PageTagRelation.createRelation(page, settingTag);
+    const tagList = [newTags];
+    const relations = await PageTagRelation.findAllTagForPage(page);
+    relations.map((relation) => {
+      const tagId = relation.relatedTag;
+      Tag.findById(tagId, async function(err, tag) {
+        if (tagList.indexOf(tag.name) >= 0) {
+          tagList.filter(relatedTag => relatedTag !== tag.name);
+        }
+        else {
+          PageTagRelation.removeByTagId(tag._id);
+          // 不要なタグ削除も走らせる
+        }
+      // Tag.findById(tagId, async function(err, tag) {
+      //   let matchedTag;
+      //   if (tag.length == 0) {
+      //     settingTag = await Tag.createTag(pageTags);
+      //   }
+      //   else {
+      //     settingTag = tag[0];
+      //   }
+      //   // Relation を作成
+      //   PageTagRelation.createRelation(page, settingTag);
+      });
     });
   }