|
|
@@ -8,13 +8,14 @@ module.exports = crowi => {
|
|
|
const esa = require('esa-nodejs');
|
|
|
const config = crowi.getConfig();
|
|
|
const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
|
|
|
+ const restQiitaAPIService = crowi.getRestQiitaAPIService();
|
|
|
let importer = {};
|
|
|
let esaClient = {};
|
|
|
|
|
|
/**
|
|
|
* Initialize importer
|
|
|
*/
|
|
|
- importer.initialize = () => {
|
|
|
+ importer.initializeEsaClient = () => {
|
|
|
esaClient = esa({
|
|
|
team: config.crowi['importer:esa:team_name'],
|
|
|
accessToken: config.crowi['importer:esa:access_token'],
|
|
|
@@ -22,6 +23,14 @@ module.exports = crowi => {
|
|
|
logger.info('initialize esa importer');
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Initialize importer
|
|
|
+ */
|
|
|
+ importer.initializeQiitaClient = () => {
|
|
|
+ restQiitaAPIService.reset();
|
|
|
+ logger.info('initialize qiita importer');
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* Import page data from esa to GROWI
|
|
|
*/
|
|
|
@@ -34,6 +43,10 @@ module.exports = crowi => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * post page data from esa and create GROWI page
|
|
|
+ * @param {string} pageNum default value is '1'
|
|
|
+ */
|
|
|
const importPostsFromEsa = (pageNum, user, errors) => {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
esaClient.api.posts({page: pageNum, per_page: 100}, async(err, res) => {
|
|
|
@@ -56,6 +69,35 @@ module.exports = crowi => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Import page data from qiita to GROWI
|
|
|
+ */
|
|
|
+ importer.importDataFromQiita = async(user) => {
|
|
|
+ const firstPage = 1;
|
|
|
+ const errors = await importPostsFromQiita(firstPage, user, []);
|
|
|
+ return errors;
|
|
|
+ };
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post page data from qiita and create GROWI page
|
|
|
+ * @param {string} pageNum default value is '1'
|
|
|
+ */
|
|
|
+ const importPostsFromQiita = async(pageNum, user, errors) => {
|
|
|
+ const per_page = '100';
|
|
|
+ const res = await restQiitaAPIService.getQiitaPages(pageNum, per_page);
|
|
|
+ const next = pageNum * per_page;
|
|
|
+ const postsReceived = res.pages;
|
|
|
+ const pageTotal = res.total;
|
|
|
+ const data = convertQiitaDataForGrowi(postsReceived, user);
|
|
|
+
|
|
|
+ const newErrors = await createGrowiPages(data);
|
|
|
+ if (next < pageTotal) {
|
|
|
+ return importPostsFromQiita(next, user, errors.concat(newErrors));
|
|
|
+ }
|
|
|
+
|
|
|
+ return errors.concat(newErrors);
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* Convert data into usable format for createGrowiPagesFromImports
|
|
|
*/
|
|
|
@@ -64,6 +106,7 @@ module.exports = crowi => {
|
|
|
const data = pages.map(post => {
|
|
|
const category = post.category;
|
|
|
const name = post.name;
|
|
|
+
|
|
|
let path = '';
|
|
|
|
|
|
if (category && name) {
|
|
|
@@ -87,18 +130,36 @@ module.exports = crowi => {
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
- * Import page data from esa to GROWI
|
|
|
+ * Convert data into usable format for createGrowiPagesFromImports
|
|
|
*/
|
|
|
- importer.testConnectionToEsa = () => {
|
|
|
- return new Promise(async(resolve, reject) => {
|
|
|
- try {
|
|
|
- await getTeamNameFromEsa();
|
|
|
- resolve();
|
|
|
- }
|
|
|
- catch (err) {
|
|
|
- reject(err);
|
|
|
- }
|
|
|
+ const convertQiitaDataForGrowi = (pages, user) => {
|
|
|
+ const basePage = '';
|
|
|
+ const data = pages.map(post => {
|
|
|
+ const title = post.title;
|
|
|
+ let path = title;
|
|
|
+
|
|
|
+ return {
|
|
|
+ path: `${basePage}/${path}`,
|
|
|
+ body: post.body,
|
|
|
+ user: user,
|
|
|
+ };
|
|
|
});
|
|
|
+
|
|
|
+ return data;
|
|
|
+ };
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Import page data from esa to GROWI
|
|
|
+ */
|
|
|
+ importer.testConnectionToEsa = async() => {
|
|
|
+ await getTeamNameFromEsa();
|
|
|
+ };
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Import page data from qiita to GROWI
|
|
|
+ */
|
|
|
+ importer.testConnectionToQiita = async() => {
|
|
|
+ await restQiitaAPIService.getQiitaUser();
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
@@ -116,7 +177,8 @@ module.exports = crowi => {
|
|
|
};
|
|
|
|
|
|
// initialize when server starts
|
|
|
- importer.initialize();
|
|
|
+ importer.initializeEsaClient();
|
|
|
+ importer.initializeQiitaClient();
|
|
|
|
|
|
return importer;
|
|
|
};
|