createGrowiPagesFromImports.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { pagePathUtils } from '@growi/core';
  2. const { isCreatablePage } = pagePathUtils;
  3. module.exports = (crowi) => {
  4. const Page = crowi.model('Page');
  5. /**
  6. * Create posts from imported data
  7. * @param pages = [{
  8. * path: String,
  9. * body: String,
  10. * user: Object
  11. * }]
  12. */
  13. const createGrowiPages = async(pages) => {
  14. const promises = [];
  15. const errors = [];
  16. /* eslint-disable no-await-in-loop */
  17. for (const page of pages) {
  18. const path = page.path;
  19. const user = page.user;
  20. const body = page.body;
  21. const isCreatableName = isCreatablePage(path);
  22. const isPageNameTaken = await Page.findByPathAndViewer(path, user);
  23. if (isCreatableName && !isPageNameTaken) {
  24. try {
  25. const promise = Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  26. promises.push(promise);
  27. }
  28. catch (err) {
  29. errors.push(err);
  30. }
  31. }
  32. else {
  33. if (!isCreatableName) {
  34. errors.push(new Error(`${path} is not a creatable name in Growi`));
  35. }
  36. if (isPageNameTaken) {
  37. errors.push(new Error(`${path} already exists in Growi`));
  38. }
  39. }
  40. }
  41. /* eslint-enable no-await-in-loop */
  42. await Promise.all(promises);
  43. return errors;
  44. };
  45. return createGrowiPages;
  46. };