فهرست منبع

Resolved conflict

Taichi Masuyama 4 سال پیش
والد
کامیت
b7121715db
1فایلهای تغییر یافته به همراه49 افزوده شده و 33 حذف شده
  1. 49 33
      packages/app/src/server/service/page.ts

+ 49 - 33
packages/app/src/server/service/page.ts

@@ -837,10 +837,8 @@ class PageService {
     const Revision = mongoose.model('Revision') as any; // TODO: Typescriptize model
     const Revision = mongoose.model('Revision') as any; // TODO: Typescriptize model
 
 
     // v4 compatible process
     // v4 compatible process
-    const isPageMigrated = page.parent != null;
-    const isV5Compatible = this.crowi.configManager.getConfig('crowi', 'app:isV5Compatible');
-    const useV4Process = !isV5Compatible || !isPageMigrated;
-    if (useV4Process) {
+    const shouldUseV4Process = this.shouldUseV4Process(page);
+    if (shouldUseV4Process) {
       return this.deletePageV4(page, user, options, isRecursively);
       return this.deletePageV4(page, user, options, isRecursively);
     }
     }
 
 
@@ -865,24 +863,30 @@ class PageService {
       this.deleteDescendantsWithStream(page, user); // use the same process in both version v4 and v5
       this.deleteDescendantsWithStream(page, user); // use the same process in both version v4 and v5
     }
     }
 
 
+    let deletedPage;
     // update Revisions
     // update Revisions
-    await Revision.updateRevisionListByPageId(page._id, { pageId: page._id });
-    const deletedPage = await Page.findByIdAndUpdate(page._id, {
-      $set: {
-        path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: Date.now(), parent: null, // set parent as null
-      },
-    }, { new: true });
-    await PageTagRelation.updateMany({ relatedPage: page._id }, { $set: { isPageTrashed: true } });
+    if (page.isEmpty) {
+      await Page.remove({ _id: page._id });
+    }
+    else {
+      await Revision.updateRevisionListByPageId(page._id, { pageId: page._id });
+      deletedPage = await Page.findByIdAndUpdate(page._id, {
+        $set: {
+          path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: Date.now(), parent: null, // set parent as null
+        },
+      }, { new: true });
+      await PageTagRelation.updateMany({ relatedPage: page._id }, { $set: { isPageTrashed: true } });
 
 
-    /*
-     * TODO: https://redmine.weseek.co.jp/issues/86577
-     * bulkWrite PageRedirect documents
-     */
-    // const body = `redirect ${newPath}`;
-    // await Page.create(page.path, body, user, { redirectTo: newPath });
+      /*
+       * TODO: https://redmine.weseek.co.jp/issues/86577
+       * bulkWrite PageRedirect documents
+       */
+      // const body = `redirect ${newPath}`;
+      // await Page.create(page.path, body, user, { redirectTo: newPath });
 
 
-    this.pageEvent.emit('delete', page, user);
-    this.pageEvent.emit('create', deletedPage, user);
+      this.pageEvent.emit('delete', page, user);
+      this.pageEvent.emit('create', deletedPage, user);
+    }
 
 
     return deletedPage;
     return deletedPage;
   }
   }
@@ -932,25 +936,39 @@ class PageService {
   private async deleteDescendants(pages, user) {
   private async deleteDescendants(pages, user) {
     const Page = mongoose.model('Page') as PageModel;
     const Page = mongoose.model('Page') as PageModel;
 
 
-    const deletePageBulkOp: any[] = [];
+    const deletePageOperations: any[] = [];
 
 
     pages.forEach((page) => {
     pages.forEach((page) => {
       const newPath = Page.getDeletedPageName(page.path);
       const newPath = Page.getDeletedPageName(page.path);
 
 
-      deletePageBulkOp.push({
-        updateOne: {
-          filter: { _id: page._id },
-          update: {
-            $set: {
-              path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: Date.now(), parent: null, // set parent as null
+      let operation;
+      // if empty, delete completely
+      if (page.isEmpty) {
+        operation = {
+          deleteOne: {
+            filter: { _id: page._id },
+          },
+        };
+      }
+      // if not empty, set parent to null and update to trash
+      else {
+        operation = {
+          updateOne: {
+            filter: { _id: page._id },
+            update: {
+              $set: {
+                path: newPath, status: Page.STATUS_DELETED, deleteUser: user._id, deletedAt: Date.now(), parent: null, // set parent as null
+              },
             },
             },
           },
           },
-        },
-      });
+        };
+      }
+
+      deletePageOperations.push(operation);
     });
     });
 
 
     try {
     try {
-      await Page.bulkWrite(deletePageBulkOp);
+      await Page.bulkWrite(deletePageOperations);
     }
     }
     catch (err) {
     catch (err) {
       if (err.code !== 11000) {
       if (err.code !== 11000) {
@@ -1055,10 +1073,8 @@ class PageService {
     const Page = mongoose.model('Page') as PageModel;
     const Page = mongoose.model('Page') as PageModel;
 
 
     // v4 compatible process
     // v4 compatible process
-    const isPageMigrated = page.parent != null;
-    const isV5Compatible = this.crowi.configManager.getConfig('crowi', 'app:isV5Compatible');
-    const useV4Process = !isV5Compatible || !isPageMigrated;
-    if (useV4Process) {
+    const shouldUseV4Process = this.shouldUseV4Process(page);
+    if (shouldUseV4Process) {
       return this.deleteCompletelyV4(page, user, options, isRecursively, preventEmitting);
       return this.deleteCompletelyV4(page, user, options, isRecursively, preventEmitting);
     }
     }