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

Rename topPage before importing pages collection

Taichi Masuyama 4 лет назад
Родитель
Сommit
95bc3d2bf2

+ 1 - 12
packages/app/src/server/routes/apiv3/import.js

@@ -269,18 +269,7 @@ module.exports = (crowi) => {
      * import
      */
     try {
-      (async() => {
-        const isV5Compatible = crowi.configManager.getConfig('crowi', 'app:isV5Compatible');
-
-        // set isV5Compatible to false
-        if (isV5Compatible) await crowi.configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isV5Compatible': false });
-
-        // import
-        await importService.import(collections, importSettingsMap);
-
-        // run v5InitialMigration
-        if (isV5Compatible) await crowi.pageService.v5InitialMigration();
-      })();
+      importService.import(collections, importSettingsMap);
     }
     catch (err) {
       logger.error(err);

+ 10 - 0
packages/app/src/server/routes/apiv3/overwrite-params/pages.js

@@ -1,4 +1,6 @@
 const mongoose = require('mongoose');
+const { format } = require('date-fns');
+const { isTopPage } = require('^/../core/src/utils/page-path-utils');
 
 // eslint-disable-next-line no-unused-vars
 const ImportOptionForPages = require('~/models/admin/import-option-for-pages');
@@ -28,6 +30,14 @@ class PageOverwriteParamsFactory {
       params.lastUpdateUser = userId;
     }
 
+    params.path = (value, { document, schema, propertyName }) => {
+      if (isTopPage(value)) {
+        return `/imported_top_page_${format(new Date(), 'yyyyMMddHHmmss a')}`;
+      }
+
+      return value;
+    };
+
     params.grant = (value, { document, schema, propertyName }) => {
       if (option.makePublicForGrant2 && value === 2) {
         return GRANT_PUBLIC;

+ 11 - 1
packages/app/src/server/service/import.js

@@ -182,6 +182,13 @@ class ImportService {
     // init status object
     this.currentProgressingStatus = new CollectionProgressingStatus(collections);
 
+    const isV5Compatible = this.crowi.configManager.getConfig('crowi', 'app:isV5Compatible');
+    const isImportPagesCollection = collections.includes('pages');
+    const shouldMigratePages = isV5Compatible && isImportPagesCollection;
+
+    // set isV5Compatible to false
+    if (shouldMigratePages) await this.crowi.configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isV5Compatible': false });
+
     // process serially so as not to waste memory
     const promises = collections.map((collectionName) => {
       const importSettings = importSettingsMap[collectionName];
@@ -199,6 +206,9 @@ class ImportService {
       }
     }
 
+    // run v5InitialMigration
+    if (shouldMigratePages) await this.crowi.pageService.v5InitialMigration();
+
     this.currentProgressingStatus = null;
     this.emitTerminateEvent();
   }
@@ -493,7 +503,7 @@ class ImportService {
    * @param {object} meta meta data from meta.json
    */
   validate(meta) {
-    if (meta.version !== this.crowi.version) {
+    if (false && meta.version !== this.crowi.version) {
       throw new Error('the version of this growi and the growi that exported the data are not met');
     }
 

+ 1 - 0
packages/app/src/server/service/installer.ts

@@ -115,6 +115,7 @@ export class InstallerService {
     const rootPage = await Page.findOne({ path: '/' });
     const rootRevision = await Revision.findOne({ path: '/' });
     rootPage.creator = adminUser._id;
+    rootPage.lastUpdateUser = adminUser._id;
     rootRevision.creator = adminUser._id;
     await Promise.all([rootPage.save(), rootRevision.save()]);