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

GW-439: just request when invoke import API

Yuki Takei 6 лет назад
Родитель
Сommit
241b37e237

+ 12 - 19
src/client/js/components/Admin/ImportData/GrowiZipImportForm.jsx

@@ -182,19 +182,23 @@ class GrowiImportForm extends React.Component {
   }
 
   async import() {
+    const { appContainer, fileName, onPostImport } = this.props;
+    const { selectedCollections, schema } = this.state;
+
     try {
       // TODO: use appContainer.apiv3.post
-      const { results } = await this.props.appContainer.apiPost('/v3/import', {
-        fileName: this.props.fileName,
-        collections: Array.from(this.state.selectedCollections),
-        schema: this.state.schema,
+      await appContainer.apiv3Post('/import', {
+        fileName,
+        collections: Array.from(selectedCollections),
+        schema,
       });
 
-      this.setState(this.initialState);
-      this.props.onPostImport();
+      if (onPostImport != null) {
+        onPostImport();
+      }
 
       // TODO: toastSuccess, toastError
-      toastr.success(undefined, 'Imported documents', {
+      toastr.success(undefined, 'Export process has requested.', {
         closeButton: true,
         progressBar: true,
         newestOnTop: false,
@@ -203,17 +207,6 @@ class GrowiImportForm extends React.Component {
         timeOut: '1200',
         extendedTimeOut: '150',
       });
-
-      for (const { collectionName, failedIds } of results) {
-        if (failedIds.length > 0) {
-          toastr.error(`failed to insert ${failedIds.join(', ')}`, collectionName, {
-            closeButton: true,
-            progressBar: true,
-            newestOnTop: false,
-            timeOut: '30000',
-          });
-        }
-      }
     }
     catch (err) {
       // TODO: toastSuccess, toastError
@@ -351,7 +344,7 @@ GrowiImportForm.propTypes = {
   fileName: PropTypes.string,
   innerFileStats: PropTypes.arrayOf(PropTypes.object).isRequired,
   onDiscard: PropTypes.func.isRequired,
-  onPostImport: PropTypes.func.isRequired,
+  onPostImport: PropTypes.func,
 };
 
 /**

+ 0 - 1
src/client/js/components/Admin/ImportData/GrowiZipImportSection.jsx

@@ -95,7 +95,6 @@ class GrowiZipImportSection extends React.Component {
               fileName={this.state.fileName}
               innerFileStats={this.state.innerFileStats}
               onDiscard={this.discardData}
-              onPostImport={this.resetState}
             />
           </div>
         ) : (

+ 8 - 18
src/server/routes/apiv3/import.js

@@ -3,7 +3,6 @@ const loggerFactory = require('@alias/logger');
 const logger = loggerFactory('growi:routes:apiv3:import'); // eslint-disable-line no-unused-vars
 
 const path = require('path');
-const fs = require('fs');
 const multer = require('multer');
 
 const { ObjectId } = require('mongoose').Types;
@@ -165,17 +164,16 @@ module.exports = (crowi) => {
     // eslint-disable-next-line no-unused-vars
     const { meta, fileStats, innerFileStats } = await growiBridgeService.parseZipFile(zipFile);
 
-    // delete zip file after unzipping and parsing it
-    fs.unlinkSync(zipFile);
-
     // filter innerFileStats
-    const filteredInnerFileStats = innerFileStats.filter(({ fileName, collectionName, size }) => { return collections.includes(collectionName) });
+    const filteredInnerFileStats = innerFileStats.filter(({ fileName, collectionName, size }) => {
+      return collections.includes(collectionName);
+    });
 
     try {
       // validate with meta.json
       importService.validate(meta);
 
-      const results = await Promise.all(filteredInnerFileStats.map(async({ fileName, collectionName, size }) => {
+      filteredInnerFileStats.map(async({ fileName, collectionName, size }) => {
         const Model = growiBridgeService.getModelFromCollectionName(collectionName);
         const jsonFile = importService.getFile(fileName);
 
@@ -185,22 +183,14 @@ module.exports = (crowi) => {
           overwriteParams = await overwriteParamsFn(Model, schema[collectionName], req);
         }
 
-        const { insertedIds, failedIds } = await importService.import(Model, jsonFile, overwriteParams);
-
-        return {
-          collectionName,
-          insertedIds,
-          failedIds,
-        };
-      }));
+        importService.import(Model, jsonFile, overwriteParams);
+      });
 
-      // TODO: use res.apiv3
-      return res.send({ ok: true, results });
+      return res.apiv3();
     }
     catch (err) {
-      // TODO: use ApiV3Error
       logger.error(err);
-      return res.status(500).send({ status: 'ERROR' });
+      return res.apiv3Err(err, 500);
     }
   });