index.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const logger = require('@alias/logger')('growi:service:UserNotificationService');
  2. const toArrayFromCsv = require('../../../lib/util/toArrayFromCsv');
  3. /**
  4. * service class of UserNotification
  5. */
  6. class UserNotificationService {
  7. constructor(crowi) {
  8. this.crowi = crowi;
  9. this.Page = this.crowi.model('Page');
  10. }
  11. /**
  12. * fire user notification
  13. *
  14. * @memberof UserNotificationService
  15. *
  16. * @param {Page} page
  17. * @param {User} user
  18. * @param {string} slackChannelsStr comma separated string. e.g. 'general,channel1,channel2'
  19. * @param {boolean} updateOrCreate
  20. * @param {string} previousRevision
  21. */
  22. async fire(page, user, slackChannelsStr, updateOrCreate, previousRevision) {
  23. const { slackNotificationService, slack } = this.crowi;
  24. try {
  25. await page.updateSlackChannel(slackChannelsStr);
  26. }
  27. catch (err) {
  28. logger.error('Error occured in updating slack channels: ', err);
  29. }
  30. if (!slackNotificationService.hasSlackConfig()) {
  31. return;
  32. }
  33. // "dev,slacktest" => [dev,slacktest]
  34. const slackChannels = toArrayFromCsv(slackChannelsStr);
  35. const promises = slackChannels.map((chan) => {
  36. return slack.postPage(page, user, chan, updateOrCreate, previousRevision);
  37. });
  38. Promise.all(promises)
  39. .catch((err) => {
  40. logger.error('Error occured in sending slack notification: ', err);
  41. });
  42. }
  43. }
  44. module.exports = UserNotificationService;