Browse Source

synchronize the process

yusuketk 7 years ago
parent
commit
4052bce607
1 changed files with 35 additions and 12 deletions
  1. 35 12
      src/server/routes/page.js

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

@@ -111,29 +111,52 @@ module.exports = function(crowi, app) {
     // if (pageTags == null) {
     // if (pageTags == null) {
     //   Tag.removeTagById(tag.id);
     //   Tag.removeTagById(tag.id);
     // }
     // }
-    const tagList = [newTags];
+    const tagList = [newTags]; // クライアント側でリスト化後、消去予定
     const relations = await PageTagRelation.findAllTagForPage(page);
     const relations = await PageTagRelation.findAllTagForPage(page);
+
+    let newTagList;
+    if (relations) {
+      console.log(relations);
+      newTagList = await shaveTagList(relations, tagList);
+    }
+    if (newTagList) {
+      newTagList.map((newTag) => {
+        Tag.find({name: newTag}, async function(err, tag) {
+          let settingTag;
+          if (tag.length == 0) {
+            settingTag = await Tag.createTag(newTag);
+          }
+          else {
+            settingTag = tag[0];
+          }
+          // Relation を作成
+          PageTagRelation.createRelation(page, settingTag);
+        });
+      });
+    }
+  }
+
+  // 既存のタグを新規タグリストから削除、および外されるタグの削除
+  async function shaveTagList(relations, tagList) {
     relations.map((relation) => {
     relations.map((relation) => {
       const tagId = relation.relatedTag;
       const tagId = relation.relatedTag;
       Tag.findById(tagId, async function(err, tag) {
       Tag.findById(tagId, async function(err, tag) {
         if (tagList.indexOf(tag.name) >= 0) {
         if (tagList.indexOf(tag.name) >= 0) {
-          tagList.filter(relatedTag => relatedTag !== tag.name);
+          tagList = await tagListFilter(tagList, tag.name);
         }
         }
         else {
         else {
           PageTagRelation.removeByTagId(tag._id);
           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);
       });
       });
+      console.log(tagList);
+    });
+  }
+
+  // array.filter promise wrapper
+  function tagListFilter(list, tag) {
+    return new Promise((resolve, reject) => {
+      resolve(list.filter(relatedTag => relatedTag !== tag));
     });
     });
   }
   }