createGrowiPagesFromImports.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 errors = [];
  14. return new Promise((resolve, reject) => {
  15. const promises = pages.map(page => {
  16. return new Promise(async(resolve, reject) => {
  17. const path = page.path;
  18. const user = page.user;
  19. const body = page.body;
  20. const isCreatableName = await Page.isCreatableName(path);
  21. const isPageNameTaken = await Page.findPage(path, user, null, true);
  22. if (isCreatableName && !isPageNameTaken) {
  23. try {
  24. await Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  25. }
  26. catch (err) {
  27. errors.push(err);
  28. }
  29. }
  30. else {
  31. if (!isCreatableName) {
  32. errors.push(new Error(`${path} is not a creatable name in Growi`));
  33. }
  34. if (isPageNameTaken) {
  35. errors.push(new Error(`${path} already exists in Growi`));
  36. }
  37. }
  38. resolve();
  39. });
  40. });
  41. Promise.all(promises)
  42. .then(() => {
  43. resolve(errors);
  44. });
  45. });
  46. };
  47. return createGrowiPages;
  48. };