|
|
@@ -6,6 +6,7 @@ module.exports = crowi => {
|
|
|
|
|
|
const logger = require('@alias/logger')('growi:util:importer');
|
|
|
const esa = require('esa-nodejs');
|
|
|
+ const qiita = require('./restQiitaAPI');
|
|
|
const config = crowi.getConfig();
|
|
|
const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
|
|
|
let importer = {};
|
|
|
@@ -56,6 +57,40 @@ module.exports = crowi => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Import page data from esa to GROWI
|
|
|
+ */
|
|
|
+ importer.importDataFromQiita = user => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const firstPage = 1;
|
|
|
+ const errors = importPostsFromQiita(firstPage, user, []);
|
|
|
+
|
|
|
+ resolve(errors);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ const importPostsFromQiita = (pageNum, user, errors) => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ esaClient.api.posts({page: pageNum, per_page: 100}, async(err, res) => { //QIITA
|
|
|
+ const nextPage = res.body.next_page;
|
|
|
+ const postsReceived = res.body.posts;
|
|
|
+
|
|
|
+ if (err) {
|
|
|
+ reject(`error in page ${pageNum}: ${err}`);
|
|
|
+ }
|
|
|
+
|
|
|
+ const data = convertQiitaDataForGrowi(postsReceived, user);
|
|
|
+ const newErrors = await createGrowiPages(data);
|
|
|
+
|
|
|
+ if (nextPage) {
|
|
|
+ return resolve(importPostsFromQiita(nextPage, user, errors.concat(newErrors)));
|
|
|
+ }
|
|
|
+
|
|
|
+ resolve(errors.concat(newErrors));
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* Convert data into usable format for createGrowiPagesFromImports
|
|
|
*/
|
|
|
@@ -86,6 +121,36 @@ module.exports = crowi => {
|
|
|
return data;
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Convert data into usable format for createGrowiPagesFromImports
|
|
|
+ */
|
|
|
+ const convertQiitaDataForGrowi = (pages, user) => {
|
|
|
+ const basePage = '';
|
|
|
+ const data = pages.map(post => {
|
|
|
+ const category = post.category;
|
|
|
+ const name = post.name;
|
|
|
+ let path = '';
|
|
|
+
|
|
|
+ if (category && name) {
|
|
|
+ path = `${category}/${name}`;
|
|
|
+ }
|
|
|
+ else if (category) {
|
|
|
+ path = category;
|
|
|
+ }
|
|
|
+ else if (name) {
|
|
|
+ path = name;
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ path: `${basePage}/${path}`,
|
|
|
+ body: post.body_md,
|
|
|
+ user: user,
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ return data;
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* Import page data from esa to GROWI
|
|
|
*/
|
|
|
@@ -101,6 +166,21 @@ module.exports = crowi => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Import page data from qiita to GROWI
|
|
|
+ */
|
|
|
+ importer.testConnectionToQiita = () => {
|
|
|
+ return new Promise(async(resolve, reject) => {
|
|
|
+ try {
|
|
|
+ await getTeamNameFromQiita();
|
|
|
+ resolve();
|
|
|
+ }
|
|
|
+ catch (err) {
|
|
|
+ reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* Get teams from esa (Promise wrapper)
|
|
|
*/
|
|
|
@@ -115,6 +195,20 @@ module.exports = crowi => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * Get teams from esa (Promise wrapper)
|
|
|
+ */
|
|
|
+ const getTeamNameFromQiita = () => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ esaClient.api.team((err, res) => { //QIITA
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ resolve(res);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
// initialize when server starts
|
|
|
importer.initialize();
|
|
|
|