createGrowiPagesFromImports.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. module.exports = crowi => {
  2. 'use strict';
  3. const Page = crowi.model('Page');
  4. /**
  5. * Create posts from imported data
  6. * @param pages = [{
  7. * path: String,
  8. * body: String,
  9. * user: Object
  10. * }]
  11. */
  12. const createGrowiPages = (pages) => {
  13. let createdPages = [];
  14. let rejectedPages = [];
  15. let errors = [];
  16. return new Promise((resolve, reject) => {
  17. const promises = pages.map(page => {
  18. return new Promise(async(resolve, reject) => {
  19. const path = page.path;
  20. const user = page.user;
  21. const body = page.body;
  22. const isCreatableName = await Page.isCreatableName(path);
  23. const isPageNameTaken = await Page.findPage(path, user, null, true);
  24. if (isCreatableName && !isPageNameTaken) {
  25. try {
  26. await Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  27. createdPages.push(page);
  28. }
  29. catch (err) {
  30. errors.push(err);
  31. }
  32. }
  33. else {
  34. rejectedPages.push(page);
  35. if (!isCreatableName) {
  36. errors.push(new Error(`${path} is not a creatable name in Growi`));
  37. }
  38. if (isPageNameTaken) {
  39. errors.push(new Error(`${path} already exists in Growi`));
  40. }
  41. }
  42. resolve();
  43. });
  44. });
  45. Promise.all(promises)
  46. .then(() => {
  47. resolve({
  48. createdPages,
  49. rejectedPages,
  50. errors,
  51. });
  52. });
  53. });
  54. };
  55. return createGrowiPages;
  56. };