2022-09-23 01:12:48 +02:00
|
|
|
const Notification = require('../Notification')
|
|
|
|
|
2022-09-22 01:01:10 +02:00
|
|
|
class NotificationSettings {
|
|
|
|
constructor(settings = null) {
|
|
|
|
this.id = 'notification-settings'
|
|
|
|
this.appriseType = 'api'
|
|
|
|
this.appriseApiUrl = null
|
|
|
|
this.notifications = []
|
|
|
|
|
|
|
|
if (settings) {
|
|
|
|
this.construct(settings)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
construct(settings) {
|
|
|
|
this.appriseType = settings.appriseType
|
|
|
|
this.appriseApiUrl = settings.appriseApiUrl || null
|
2022-09-24 01:10:03 +02:00
|
|
|
this.notifications = (settings.notifications || []).map(n => new Notification(n))
|
2022-09-22 01:01:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
toJSON() {
|
|
|
|
return {
|
|
|
|
id: this.id,
|
|
|
|
appriseType: this.appriseType,
|
|
|
|
appriseApiUrl: this.appriseApiUrl,
|
|
|
|
notifications: this.notifications.map(n => n.toJSON())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
get isUseable() {
|
|
|
|
return !!this.appriseApiUrl
|
|
|
|
}
|
|
|
|
|
|
|
|
getNotificationsForEvent(eventName) {
|
|
|
|
return this.notifications.filter(n => n.eventName === eventName)
|
|
|
|
}
|
|
|
|
|
2022-09-24 01:10:03 +02:00
|
|
|
getNotification(id) {
|
|
|
|
return this.notifications.find(n => n.id === id)
|
|
|
|
}
|
|
|
|
|
|
|
|
removeNotification(id) {
|
|
|
|
if (this.notifications.some(n => n.id === id)) {
|
|
|
|
this.notifications = this.notifications.filter(n => n.id !== id)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2022-09-22 01:01:10 +02:00
|
|
|
update(payload) {
|
|
|
|
if (!payload) return false
|
|
|
|
if (payload.appriseApiUrl !== this.appriseApiUrl) {
|
|
|
|
this.appriseApiUrl = payload.appriseApiUrl || null
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
2022-09-23 01:12:48 +02:00
|
|
|
|
2022-09-24 01:10:03 +02:00
|
|
|
createNotification(payload) {
|
2022-09-23 01:12:48 +02:00
|
|
|
if (!payload) return false
|
|
|
|
// TODO: validate
|
|
|
|
|
|
|
|
const notification = new Notification()
|
|
|
|
notification.setData(payload)
|
|
|
|
this.notifications.push(notification)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2022-09-24 01:10:03 +02:00
|
|
|
updateNotification(payload) {
|
2022-09-23 01:12:48 +02:00
|
|
|
if (!payload) return false
|
|
|
|
const notification = this.notifications.find(n => n.id === payload.id)
|
|
|
|
if (!notification) return false
|
|
|
|
|
|
|
|
return notification.update(payload)
|
|
|
|
}
|
2022-09-22 01:01:10 +02:00
|
|
|
}
|
|
|
|
module.exports = NotificationSettings
|