Explorar el Código

rename path and imprv modularity

mizozobu hace 6 años
padre
commit
035e331ff7

+ 9 - 6
src/server/routes/apiv3/page.js → src/server/routes/apiv3/export.js

@@ -1,6 +1,6 @@
 const loggerFactory = require('@alias/logger');
 const loggerFactory = require('@alias/logger');
 
 
-const logger = loggerFactory('growi:routes:apiv3:page'); // eslint-disable-line no-unused-vars
+const logger = loggerFactory('growi:routes:apiv3:export'); // eslint-disable-line no-unused-vars
 
 
 const express = require('express');
 const express = require('express');
 
 
@@ -9,16 +9,17 @@ const router = express.Router();
 /**
 /**
  * @swagger
  * @swagger
  *  tags:
  *  tags:
- *    name: Page
+ *    name: Export
  */
  */
 
 
 module.exports = (crowi) => {
 module.exports = (crowi) => {
   const { exportService } = crowi;
   const { exportService } = crowi;
+  const { Page } = crowi.models;
 
 
   /**
   /**
    * @swagger
    * @swagger
    *
    *
-   *  /page/dump:
+   *  /export/pages:
    *    get:
    *    get:
    *      tags: [Page]
    *      tags: [Page]
    *      description: generate a zipped json for page collection
    *      description: generate a zipped json for page collection
@@ -30,13 +31,15 @@ module.exports = (crowi) => {
    *          content:
    *          content:
    *            application/json:
    *            application/json:
    */
    */
-  router.get('/dump', async(req, res) => {
+  router.get('/pages', async(req, res) => {
+    // TODO: rename path to "/:collection" and add express validator
     try {
     try {
-      await exportService.exportPageCollection();
+      await exportService.exportCollection(Page);
+      // TODO:use res.apiv3
       return res.status(200).send({ status: 'DONE' });
       return res.status(200).send({ status: 'DONE' });
     }
     }
     catch (err) {
     catch (err) {
-      // TODO:user ApiV3Error
+      // TODO: use ApiV3Error
       logger.error(err);
       logger.error(err);
       return res.status(500).send({ status: 'ERROR' });
       return res.status(500).send({ status: 'ERROR' });
     }
     }

+ 1 - 1
src/server/routes/apiv3/index.js

@@ -9,7 +9,7 @@ const router = express.Router();
 module.exports = (crowi) => {
 module.exports = (crowi) => {
   router.use('/healthcheck', require('./healthcheck')(crowi));
   router.use('/healthcheck', require('./healthcheck')(crowi));
 
 
-  router.use('/pages', require('./page')(crowi));
+  router.use('/export', require('./export')(crowi));
 
 
   return router;
   return router;
 };
 };

+ 21 - 13
src/server/service/export.js

@@ -2,19 +2,26 @@ const logger = require('@alias/logger')('growi:services:ExportService'); // esli
 
 
 const fs = require('fs');
 const fs = require('fs');
 const path = require('path');
 const path = require('path');
-const mongoose = require('mongoose');
-
-const Page = mongoose.model('Page');
 
 
 class ExportService {
 class ExportService {
 
 
   constructor(crowi) {
   constructor(crowi) {
-    this.baseDir = crowi.tmpDir;
+    this.baseDir = path.join(crowi.tmpDir, 'downloads');
     this.limit = 100;
     this.limit = 100;
 
 
-    this.files = {
-      pages: path.join(this.baseDir, 'pages.json'),
-    };
+    this.files = {};
+    // populate this.files
+    // this.files = {
+    //   configs: path.join(this.baseDir, 'configs.json'),
+    //   pages: path.join(this.baseDir, 'pages.json'),
+    //   pagetagrelations: path.join(this.baseDir, 'pagetagrelations.json'),
+    //   ...
+    // };
+    // TODO: handle 3 globalnotificationsettings collection properly
+    Object.values(crowi.models).forEach((m) => {
+      const name = m.collection.collectionName;
+      this.files[name] = path.join(this.baseDir, `${name}.json`);
+    });
   }
   }
 
 
   /**
   /**
@@ -87,26 +94,27 @@ class ExportService {
   }
   }
 
 
   /**
   /**
-   * dump page collection
+   * dump a mongodb collection into json
    *
    *
    * @memberOf ExportService
    * @memberOf ExportService
+   * @param {object} Model instance of mongoose model
    */
    */
-  async exportPageCollection() {
-    const file = this.files.pages;
+  async exportCollection(Model) {
+    const file = this.files[Model.collection.collectionName];
 
 
     const getTotalFn = () => {
     const getTotalFn = () => {
-      return Page.countDocuments();
+      return Model.countDocuments();
     };
     };
 
 
     const paginatedQueryFn = (limit, pageNum) => {
     const paginatedQueryFn = (limit, pageNum) => {
-      return Page
+      return Model
         .find()
         .find()
         .skip(limit * pageNum)
         .skip(limit * pageNum)
         .limit(limit);
         .limit(limit);
     };
     };
 
 
     await this.export(file, getTotalFn, paginatedQueryFn);
     await this.export(file, getTotalFn, paginatedQueryFn);
-    logger.debug(`exported page collection into ${file}`);
+    logger.debug(`exported ${Model.collection.collectionName} collection into ${file}`);
   }
   }
 
 
 }
 }