Ver Fonte

create lists(set tags and unlinked tags)

yusuketk há 7 anos atrás
pai
commit
51b2c15401
1 ficheiros alterados com 51 adições e 31 exclusões
  1. 51 31
      src/server/models/page.js

+ 51 - 31
src/server/models/page.js

@@ -293,21 +293,58 @@ module.exports = function(crowi) {
   };
   };
 
 
   pageSchema.methods.updateTags = async function(newTags) {
   pageSchema.methods.updateTags = async function(newTags) {
-    const setTagList = [newTags]; // [TODO] listing requested Tags on client side
     const PageTagRelation = mongoose.model('PageTagRelation');
     const PageTagRelation = mongoose.model('PageTagRelation');
+    const Tag = mongoose.model('Tag');
+
+    const newTagList = [newTags]; // [TODO] listing requested Tags on client side
+
+    // get tags relate this page
     const relations = await PageTagRelation.find({relatedPage: this._id});
     const relations = await PageTagRelation.find({relatedPage: this._id});
-    console.log(relations);
-    // Promise.all(relations.map(async relation => {
-    //   return await Tag.getOneById(relation.relatedTag); // tagId からタグ名を取得
-    // })).then(tags => {
-    //   let relatedTagList = []; // relatedTagList -> stayTagList
-    //   tags.map(async relatedTag => {
-    //     if (!setTagList.includes(relatedTag.name)) { // 紐付け済みのタグが新タグになければそのリレーションを削除
-    //       await PageTagRelation.removeByEachId(page._id, relatedTag._id);
-    //       const pagesRelateTag = await PageTagRelation.findAllPageIdForTag(relatedTag);
-    //       if (pagesRelateTag.length == 0) { // 今リレーションを消したタグに紐づくページがなければタグ自体削除
-    //         Tag.removeById(relatedTag._id);
-    //       }
+    const relatedTagList = await Promise.all(relations.map(async function(relation) {
+      const relatedTag =  await Tag.findOne({_id: relation.relatedTag}, 'name');
+      return relatedTag.name;
+    }));
+
+    // creat set tag list
+    const setTagList = [];
+    newTagList.map(async function(newTag) {
+      if (!relatedTagList.includes(newTag)) {
+        setTagList.push(newTag);
+      }
+    });
+
+    // creat unlinked tag list
+    const unlinkedTagList = [];
+    relatedTagList.map(async function(relatedTag) {
+      if (!newTagList.includes(relatedTag)) {
+        unlinkedTagList.push(relatedTag);
+      }
+    });
+
+      // if (newTagList.length > 0) {
+      //   newTagList.map((newTag) => {
+      //     if (newTag) {
+      //       Tag.find({
+      //         name: newTag
+      //       }, async function (err, tag) {
+      //         let settingTag;
+      //         if (tag.length == 0) { // 初使用のタグの場合新規作成
+      //           settingTag = await Tag.createTag(newTag);
+      //         } else { // 他のページで使っているタグの場合それを利用
+      //           settingTag = tag[0];
+      //         }
+      //         // make a relation
+      //         PageTagRelation.createRelation(page, settingTag); // リレーションを作成
+      //       });
+      //     }
+      //   });
+      // }
+
+        // await PageTagRelation.removeByEachId(page._id, relatedTag._id);
+        // const pagesRelateTag = await PageTagRelation.findAllPageIdForTag(relatedTag);
+        // if (pagesRelateTag.length == 0) { // 今リレーションを消したタグに紐づくページがなければタグ自体削除
+        //   Tag.removeById(relatedTag._id);
+        // }
     //     } else {
     //     } else {
     //       relatedTagList.push(relatedTag.name); // 紐付け済みのタグが新タグにも含まれていれば 維持リストに追加
     //       relatedTagList.push(relatedTag.name); // 紐付け済みのタグが新タグにも含まれていれば 維持リストに追加
     //     }
     //     }
@@ -317,24 +354,7 @@ module.exports = function(crowi) {
     //       return setTag;
     //       return setTag;
     //     }
     //     }
     //   });
     //   });
-    //   if (newTagList.length > 0) {
-    //     newTagList.map((newTag) => {
-    //       if (newTag) {
-    //         Tag.find({
-    //           name: newTag
-    //         }, async function (err, tag) {
-    //           let settingTag;
-    //           if (tag.length == 0) { // 初使用のタグの場合新規作成
-    //             settingTag = await Tag.createTag(newTag);
-    //           } else { // 他のページで使っているタグの場合それを利用
-    //             settingTag = tag[0];
-    //           }
-    //           // make a relation
-    //           PageTagRelation.createRelation(page, settingTag); // リレーションを作成
-    //         });
-    //       }
-    //     });
-    //   }
+
     // });
     // });
   };
   };