Sfoglia il codice sorgente

(WIP) qiita:team importer is imperfect

yusuketk 7 anni fa
parent
commit
8619916b89

+ 3 - 1
lib/form/admin/importer.js

@@ -5,6 +5,8 @@ var form = require('express-form')
 
 module.exports = form(
   field('settingForm[importer:esa:access_token]').required(),
-  field('settingForm[importer:esa:team_name]').required()
+  field('settingForm[importer:esa:team_name]').required(),
+  field('settingForm[importer:qiita:access_token]').required(),
+  field('settingForm[importer:qiita:team_name]').required()
 );
 

+ 1 - 0
lib/form/index.js

@@ -37,5 +37,6 @@ module.exports = {
     slackSetting: require('./admin/slackSetting'),
     userGroupCreate: require('./admin/userGroupCreate'),
     importer: require('./admin/importer'),
+    notificationGlobal: require('./admin/notificationGlobal'),
   },
 };

+ 33 - 0
lib/routes/admin.js

@@ -1134,6 +1134,39 @@ module.exports = function(crowi, app) {
     });
   }
 
+  /**
+   * Import all posts from qiita
+   *
+   * @param {*} req
+   * @param {*} res
+   */
+  actions.api.importAllPostsFromQiita = function(req, res) {
+    var user = req.user;
+    importer.importAllPostsFromQiita(user)
+    .then(function() {
+      return res.json({ status: true });
+    })
+    .catch(function(err) {
+      return res.json({ status: false, message: `${err}` });
+    });
+  }
+
+  /**
+   * Test connection to qiita and response result with json
+   *
+   * @param {*} req
+   * @param {*} res
+   */
+  actions.api.testQiitaAPI = function(req, res) {
+    importer.testConnectionToQiita()
+    .then(function() {
+      return res.json({ status: true });
+    })
+    .catch(function(err) {
+      return res.json({ status: false, message: `${err}` });
+    });
+  }
+
   /**
    * save settings, update config cache, and response json
    *

+ 2 - 0
lib/routes/index.js

@@ -139,6 +139,8 @@ module.exports = function(crowi, app) {
   app.post('/_api/admin/settings/importer' , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.importerSetting);
   app.post('/_api/admin/import/esa'        , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.importAllPostsFromEsa);
   app.post('/_api/admin/import/testEsaAPI' , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.testEsaAPI);
+  // app.post('/_api/admin/import/qiita'        , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.importAllPostsFromQiita);
+  // app.post('/_api/admin/import/testQiitaAPI' , loginRequired(crowi, app) , middleware.adminRequired() , csrf , form.admin.importer , admin.api.testQiitaAPI);
 
   app.get('/me'                       , loginRequired(crowi, app) , me.index);
   app.get('/me/password'              , loginRequired(crowi, app) , me.password);

+ 103 - 0
lib/util/importer.js

@@ -9,6 +9,8 @@ module.exports = function(crowi) {
     , request = require('request')
     , esa = require('esa-nodejs')
     , esaClient = {}
+    , qiita = require('./qiitaClient')
+    , qiitaClient = {}
     , Page = crowi.model('Page')
     , User = crowi.model('User')
     , pageRouter = require('../routes/page')(crowi)
@@ -117,4 +119,105 @@ module.exports = function(crowi) {
   importer.esaClient = esaClient;
 
   return importer;
+
+  /**
+   * Initialize importer
+   */
+  function initialize() {
+    qiitaClient = qiita({
+      team:        config.crowi['importer:qiita:team_name'],
+      accessToken: config.crowi['importer:qiita:access_token'],
+    });
+    debug('qiita client is initialized');
+  }
+  /**
+   * Get teams from qiita (Promise wrapper)
+   */
+  function getTeamsFromQiita() {
+    return new Promise(function(resolve, reject) {
+      qiitaClient.api.team(function(err, res) {
+        if (err) {
+          debug(err);
+          reject(err);
+        }
+        resolve(res);
+      })
+    });
+  }
+
+  /**
+   * Get posts from qiita (Promise wrapper)
+   */
+  function getPostsFromQiita() {
+    return new Promise(function(resolve, reject) {
+      qiitaClient.api.posts(function(err, res) {
+        if (err) {
+          debug(err);
+          reject(err);
+        }
+        resolve(res);
+      });
+    });
+  }
+
+  /**
+   * Import post data from qiita to GROWI
+   */
+  importer.importAllPostsFromQiita = function(user) {
+    /* Get posts from qiita */
+    return new Promise(function(resolve, reject) {
+      getPostsFromQiita()
+      .then(function(res) {
+        /* Import to GROWI */
+        var basePage = '/';
+        var ignoreNotFound = true;
+        res.body.posts.forEach(function(post) {
+          var pagePath = basePage + [post.category, post.name].filter(v => v).join('/')
+          Page.findPage(pagePath, user, null, ignoreNotFound)
+          .then(function(data) {
+            if (data !== null) {
+              reject('Page exists');
+            }
+            return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
+          })
+          .then(function(createdPage) {
+            if (!createdPage) {
+              reject('Page exists');
+            }
+            debug('Crete page: ' + createdPage);
+            resolve();
+          })
+          .catch(function(err) {
+            debug(err);
+            reject(err);
+          })
+        });
+      })
+      .catch(function(err) {
+        debug(err);
+        reject(err);
+      });
+    });
+  }
+
+  /**
+   * Import post data from esa to GROWI
+   */
+  importer.testConnectionToQiita = function() {
+    return new Promise(function(resolve, reject) {
+      getTeamsFromQiita()
+      .then(function(res) {
+        resolve();
+      })
+      .catch(function(err) {
+        debug(err);
+        reject(err);
+      });
+    });
+  }
+
+  initialize();
+  importer.qiitaClient = qiitaClient;
+
+  return importer;
 };

+ 4 - 0
lib/util/qiitaClient.js

@@ -0,0 +1,4 @@
+module.exports = {
+
+};
+