| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- const toArrayFromCsv = require('@commons/util/to-array-from-csv');
- /**
- * service class of UserNotification
- */
- class UserNotificationService {
- constructor(crowi) {
- this.crowi = crowi;
- this.Page = this.crowi.model('Page');
- }
- /**
- * fire user notification
- *
- * @memberof UserNotificationService
- *
- * @param {Page} page
- * @param {User} user
- * @param {string} slackChannelsStr comma separated string. e.g. 'general,channel1,channel2'
- * @param {boolean} updateOrCreate
- * @param {string} previousRevision
- */
- async fire(page, user, slackChannelsStr, updateOrCreate, previousRevision) {
- const { slackNotificationService, slack } = this.crowi;
- await page.updateSlackChannel(slackChannelsStr);
- if (!slackNotificationService.hasSlackConfig()) {
- throw new Error('slackNotificationService has not been set up');
- }
- // "dev,slacktest" => [dev,slacktest]
- const slackChannels = toArrayFromCsv(slackChannelsStr);
- const promises = slackChannels.map(async(chan) => {
- const res = await slack.postPage(page, user, chan, updateOrCreate, previousRevision);
- if (res.status !== 'ok') {
- throw new Error(`fail to send slack notification to #${chan} channel`);
- }
- return res;
- });
- return Promise.allSettled(promises);
- }
- }
- module.exports = UserNotificationService;
|