Просмотр исходного кода

move a method for updating tags

yusuketk 7 лет назад
Родитель
Сommit
0e87526dfc
2 измененных файлов с 47 добавлено и 50 удалено
  1. 46 0
      src/server/models/page.js
  2. 1 50
      src/server/routes/page.js

+ 46 - 0
src/server/models/page.js

@@ -292,6 +292,52 @@ module.exports = function(crowi) {
     return false;
   };
 
+  pageSchema.methods.updateTags = async function(newTags) {
+    const setTagList = [newTags]; // [TODO] listing requested Tags on client side
+    const PageTagRelation = mongoose.model('PageTagRelation');
+    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);
+    //       }
+    //     } else {
+    //       relatedTagList.push(relatedTag.name); // 紐付け済みのタグが新タグにも含まれていれば 維持リストに追加
+    //     }
+    //   });
+    //   const newTagList = setTagList.map(setTag => {
+    //     if (!relatedTagList.includes(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); // リレーションを作成
+    //         });
+    //       }
+    //     });
+    //   }
+    // });
+  };
+
   pageSchema.methods.isPortal = function() {
     return isPortalPath(this.path);
   };

+ 1 - 50
src/server/routes/page.js

@@ -6,8 +6,6 @@ module.exports = function(crowi, app) {
     , pagePathUtils = require('@commons/util/page-path-utils')
     , Page = crowi.model('Page')
     , User = crowi.model('User')
-    , Tag = crowi.model('Tag')
-    , PageTagRelation = crowi.model('PageTagRelation')
     , Config   = crowi.model('Config')
     , config   = crowi.getConfig()
     , Bookmark = crowi.model('Bookmark')
@@ -107,53 +105,6 @@ module.exports = function(crowi, app) {
     }
   }
 
-  async function updateTags(page, newTags) {
-    const setTagList = [newTags]; // [TODO] listing requested Tags on client side
-    const relatedTagIdList = await PageTagRelation.findAllTagIdForPage(page);
-    Promise.all(relatedTagIdList.map(async id => {
-      return await Tag.getOneById(id);
-    })
-    ).then(tags => {
-      let relatedTagList = [];
-      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);
-          }
-        }
-        else {
-          relatedTagList.push(relatedTag.name);
-        }
-      });
-      const newTagList = setTagList.map(setTag => {
-        if (!relatedTagList.includes(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);
-            });
-          }
-        });
-      }
-    });
-  }
-
   function addRendarVarsForPage(renderVars, page) {
     renderVars.page = page;
     renderVars.path = page.path;
@@ -707,7 +658,7 @@ module.exports = function(crowi, app) {
     }
 
     // update page tag
-    await updateTags(page, pageTags);
+    await page.updateTags(pageTags);
   };
 
   /**