itizawa 5 лет назад
Родитель
Сommit
b5eafc788d
1 измененных файлов с 15 добавлено и 2 удалено
  1. 15 2
      src/server/service/page.js

+ 15 - 2
src/server/service/page.js

@@ -81,15 +81,27 @@ class PageService {
   async duplicateDescendants(pages, user, oldPagePathPrefix, newPagePathPrefix, pathRevisionMapping) {
     const Page = this.crowi.model('Page');
     const Revision = this.crowi.model('Revision');
+    const PageTagRelation = mongoose.model('PageTagRelation');
 
+    const newPageTagRelation = [];
     const newPages = [];
     const newRevisions = [];
 
-    pages.forEach((page) => {
+    await Promise.all(pages.map(async(page) => {
       const newPagePath = page.path.replace(oldPagePathPrefix, newPagePathPrefix);
+      const pageId = new mongoose.Types.ObjectId();
       const revisionId = new mongoose.Types.ObjectId();
 
+      const pageTagRelations = await PageTagRelation.find({ relatedPage: page._id });
+      pageTagRelations.forEach((pageTagRelation) => {
+        newPageTagRelation.push({
+          relatedPage: pageId,
+          relatedTag: pageTagRelation.relatedTag,
+        });
+      });
+
       newPages.push({
+        _id: pageId,
         path: newPagePath,
         creator: user._id,
         grant: page.grant,
@@ -104,8 +116,9 @@ class PageService {
         _id: revisionId, path: newPagePath, body: pathRevisionMapping[page.path].body, author: user._id, format: 'markdown',
       });
 
-    });
+    }));
 
+    await PageTagRelation.insertMany(newPageTagRelation, { ordered: false });
     await Page.insertMany(newPages, { ordered: false });
     await Revision.insertMany(newRevisions, { ordered: false });