index.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const toArrayFromCsv = require('@commons/util/to-array-from-csv');
  2. /**
  3. * service class of UserNotification
  4. */
  5. class UserNotificationService {
  6. constructor(crowi) {
  7. this.crowi = crowi;
  8. this.Page = this.crowi.model('Page');
  9. }
  10. /**
  11. * fire user notification
  12. *
  13. * @memberof UserNotificationService
  14. *
  15. * @param {Page} page
  16. * @param {User} user
  17. * @param {string} slackChannelsStr comma separated string. e.g. 'general,channel1,channel2'
  18. * @param {boolean} updateOrCreate
  19. * @param {string} previousRevision
  20. */
  21. async fire(page, user, slackChannelsStr, updateOrCreate, previousRevision) {
  22. const { slackNotificationService, slack } = this.crowi;
  23. await page.updateSlackChannel(slackChannelsStr);
  24. if (!slackNotificationService.hasSlackConfig()) {
  25. throw new Error('slackNotificationService has not been set up');
  26. }
  27. // "dev,slacktest" => [dev,slacktest]
  28. const slackChannels = toArrayFromCsv(slackChannelsStr);
  29. const promises = slackChannels.map(async(chan) => {
  30. const res = await slack.postPage(page, user, chan, updateOrCreate, previousRevision);
  31. if (res.status !== 'ok') {
  32. throw new Error(`fail to send slack notification to #${chan} channel`);
  33. }
  34. return res;
  35. });
  36. return Promise.allSettled(promises);
  37. }
  38. }
  39. module.exports = UserNotificationService;