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

refactor CollectionProgressingStatus

Yuki Takei 6 лет назад
Родитель
Сommit
0d8b3813ce
2 измененных файлов с 27 добавлено и 14 удалено
  1. 9 11
      src/server/models/vo/collection-progressing-status.js
  2. 18 3
      src/server/service/export.js

+ 9 - 11
src/server/models/vo/collection-progressing-status.js

@@ -1,24 +1,22 @@
-const mongoose = require('mongoose');
 const CollectionProgress = require('./collection-progress');
 
 class CollectionProgressingStatus {
 
-  constructor() {
+  constructor(collections) {
     this.totalCount = 0;
-
-    this.progressList = null;
     this.progressMap = {};
-  }
 
-  async init(collections) {
-    const promisesForCreatingInstance = collections.map(async(collectionName) => {
-      const collection = mongoose.connection.collection(collectionName);
-      const totalCount = await collection.count();
-      return new CollectionProgress(collectionName, totalCount);
+    this.progressList = collections.map((collectionName) => {
+      return new CollectionProgress(collectionName, 0);
     });
-    this.progressList = await Promise.all(promisesForCreatingInstance);
 
     // collection name to instance mapping
+    this.progressList.forEach((p) => {
+      this.progressMap[p.collectionName] = p;
+    });
+  }
+
+  recalculateTotalCount() {
     this.progressList.forEach((p) => {
       this.progressMap[p.collectionName] = p;
       this.totalCount += p.totalCount;

+ 18 - 3
src/server/service/export.js

@@ -11,6 +11,21 @@ const toArrayIfNot = require('../../lib/util/toArrayIfNot');
 
 const CollectionProgressingStatus = require('../models/vo/collection-progressing-status');
 
+class ExportProgressingStatus extends CollectionProgressingStatus {
+
+  async init() {
+    // retrieve total document count from each collections
+    const promises = this.progressList.map(async(collectionProgress) => {
+      const collection = mongoose.connection.collection(collectionProgress.collectionName);
+      collectionProgress.totalCount = await collection.count();
+    });
+    await Promise.all(promises);
+
+    this.recalculateTotalCount();
+  }
+
+}
+
 class ExportService {
 
   constructor(crowi) {
@@ -79,7 +94,7 @@ class ExportService {
 
   /**
    *
-   * @param {ExportProguress} exportProgress
+   * @param {ExportProgress} exportProgress
    * @return {Transform}
    */
   generateLogStream(exportProgress) {
@@ -206,8 +221,8 @@ class ExportService {
       throw new Error('There is an exporting process running.');
     }
 
-    this.currentProgressingStatus = new CollectionProgressingStatus();
-    await this.currentProgressingStatus.init(collections);
+    this.currentProgressingStatus = new ExportProgressingStatus(collections);
+    await this.currentProgressingStatus.init();
 
     try {
       await this.exportCollectionsToZippedJson(collections);