Explorar el Código

remove inactive tag when removing page-tag-relation

yusuketk hace 7 años
padre
commit
a700844e57
Se han modificado 2 ficheros con 49 adiciones y 39 borrados
  1. 10 1
      src/server/models/tag.js
  2. 39 38
      src/server/routes/page.js

+ 10 - 1
src/server/models/tag.js

@@ -130,7 +130,16 @@ module.exports = function (crowi) {
 //     });
 //   };
 
-  tagSchema.statics.removeTagById = function(tagId) {
+  tagSchema.statics.removeById = function(tagId) {
+    const Tag = this;
+    Tag.remove({_id: tagId}, function(err, done) {
+      if (err) {
+        throw new Error(err);
+      }
+    });
+  };
+
+  tagSchema.statics.removeInactiveTag = function(tagId) {
     const Tag = this;
     Tag.remove({_id: tagId}, function(err, done) {
       if (err) {

+ 39 - 38
src/server/routes/page.js

@@ -108,48 +108,49 @@ module.exports = function(crowi, app) {
   }
 
   async function updateTags(page, user, newTags, updateOrCreate, previousRevision) {
-    const setTagList = ['On-On', 'Off-On']; // クライアント側でリスト化後、消去予定
+    const setTagList = ['On-On', 'Off-On']; // クライアント側で newTags をリスト化後、消去予定
     const relatedTagIdList = await PageTagRelation.findAllTagIdForPage(page);
-    if (relatedTagIdList.length > 0) {
-      Promise.all(relatedTagIdList.map(async id => {
-        return await Tag.getOneById(id);
-      })
-      ).then(tags => {
-        const relatedTagList = tags.map(relatedTag => {
-          if (!setTagList.includes(relatedTag.name)) {
-            PageTagRelation.removeByTagId(relatedTag._id);
-            return;
+    Promise.all(relatedTagIdList.map(async id => {
+      return await Tag.getOneById(id);
+    })
+    ).then(tags => {
+      const relatedTagList = tags.map(relatedTag => {
+        if (!setTagList.includes(relatedTag.name)) {
+          PageTagRelation.removeByTagId(relatedTag._id);
+          if (!PageTagRelation.findAllPageForTag) {
+            Tag.removeById(relatedTag._id);
           }
-          else {
-            return 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];
-                }
-                // Relation を作成
-                PageTagRelation.createRelation(page, settingTag);
-              });
-            }
-          });
+          return;
+        }
+        else {
+          return 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];
+              }
+              // Relation を作成
+              PageTagRelation.createRelation(page, settingTag);
+            });
+          }
+        });
+      }
+    });
   }
 
   function addRendarVarsForPage(renderVars, page) {