A provider for easy sending notifications (Inspired Laravel Notifications)
- Add package:
$ npm i adonis-notifications --save
or
$ yarn add adonis-notifications
- Register providers inside the your start/app.js file.
const providers = [
...
'adonis-notifications/providers/NotificationsProvider',
...
]
const aceProviders = [
...
'adonis-notifications/providers/CommandsProvider',
...
]
- Notifications table
./ace run notifications:setup
// app/Model/User.js
...
class User extends Lucid {
static get traits () {
return [
'@provider:Morphable',
'@provider:HasDatabaseNotifications',
'@provider:Notifiable'
]
}
}
...
This package used adonis-lucid-polymorphic for database
channel.
// app/Notifications/TestNotification.js
...
class TestNotification {
static get type () {
return 'test'
}
via () {
return ['database']
}
toJSON () {
return {
foo: 'bar'
}
}
}
...
// app/Http/routes.js
const Notifications = use('Notifications')
...
// from model instance
const user = await User.find(1)
await user.notify(user, new TestNotification())
// to one user
const user = await User.find(1)
await Notifications.send(user, new TestNotification())
// to many users
const users = await User.query().fetch()
await Notifications.send(users, new TestNotification())
...
// app/providers/YourProvider.js
...
boot () {
const NotificationManager = this.app.use('Notifications')
NotificationManager.extend('custom', () => {
return new CustomChannel()
})
}
...
const FcmMessage = use('FcmMessage')
const Notifications = use('Notifications')
class PushTestNotification {
constructor (animal) {
this.animal = animal
}
static get type () {
return 'pushtest'
}
via () {
return ['fcm']
}
toFcm () {
const message = new FcmMessage()
switch (this.animal) {
case 'cat':
message.addNotification('title', 'Cat')
message.addNotification('body', 'Meow!')
message.addNotification('icon', 'cat_black')
message.addNotification('color', '#ffab00')
message.addNotification('sound', 'default')
message.addData('animal', 'cat')
break
case 'cow':
message.addNotification('title', 'Cow')
message.addNotification('body', 'Moo!')
message.addNotification('icon', 'cow_black')
message.addNotification('color', '#aeaeaf')
message.addNotification('sound', 'default')
message.addData('animal', 'cow')
break
case 'dog':
message.addNotification('title', 'Dog')
message.addNotification('body', 'Woof!')
message.addNotification('icon', 'dog_black')
message.addNotification('color', '#b19267')
message.addNotification('sound', 'default')
message.addData('animal', 'dog')
break
case 'duck':
message.addNotification('title', 'Duck')
message.addNotification('body', 'Quack!')
message.addNotification('icon', 'duck_black')
message.addNotification('color', '#bd7f00')
message.addNotification('sound', 'default')
message.addData('animal', 'duck')
break
case 'pig':
message.addNotification('title', 'Pig')
message.addNotification('body', 'Oink!')
message.addNotification('icon', 'pig_black')
message.addNotification('color', '#d37b93')
message.addNotification('sound', 'default')
message.addData('animal', 'pig')
break
default:
message.addNotification('title', 'Animal')
message.addNotification('body', 'A wild animal has appeared!')
message.addNotification('sound', 'default')
break
}
return message
}
}
Notifications
.route('fcm', '<DEVICE_TOKEN>')
.notify(new PushTestNotification('cat'))
- adonis-fcm-notification-channel
- adonis-mail-notification-channel
- adonis-webhook-notification-channel
Having trouble? Open an issue!
The MIT License (MIT). Please see License File for more information.