feat: Notification action cable event (#4154)
This commit is contained in:
parent
430547e026
commit
23fe8847d8
5 changed files with 21 additions and 1 deletions
|
@ -16,6 +16,7 @@ Metrics/ClassLength:
|
||||||
- 'app/models/message.rb'
|
- 'app/models/message.rb'
|
||||||
- 'app/builders/messages/facebook/message_builder.rb'
|
- 'app/builders/messages/facebook/message_builder.rb'
|
||||||
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
|
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
|
||||||
|
- 'app/listeners/action_cable_listener.rb'
|
||||||
RSpec/ExampleLength:
|
RSpec/ExampleLength:
|
||||||
Max: 25
|
Max: 25
|
||||||
Style/Documentation:
|
Style/Documentation:
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
class ActionCableListener < BaseListener
|
class ActionCableListener < BaseListener
|
||||||
include Events::Types
|
include Events::Types
|
||||||
|
|
||||||
|
def notification_created(event)
|
||||||
|
notification, account = extract_notification_and_account(event)
|
||||||
|
tokens = [event.data[:notification].user.pubsub_token]
|
||||||
|
broadcast(account, tokens, NOTIFICATION_CREATED, notification.push_event_data)
|
||||||
|
end
|
||||||
|
|
||||||
def message_created(event)
|
def message_created(event)
|
||||||
message, account = extract_message_and_account(event)
|
message, account = extract_message_and_account(event)
|
||||||
conversation = message.conversation
|
conversation = message.conversation
|
||||||
|
|
|
@ -6,6 +6,11 @@ class BaseListener
|
||||||
[conversation, conversation.account]
|
[conversation, conversation.account]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def extract_notification_and_account(event)
|
||||||
|
notification = event.data[:notification]
|
||||||
|
[notification, notification.account]
|
||||||
|
end
|
||||||
|
|
||||||
def extract_message_and_account(event)
|
def extract_message_and_account(event)
|
||||||
message = event.data[:message]
|
message = event.data[:message]
|
||||||
[message, message.account]
|
[message, message.account]
|
||||||
|
|
|
@ -39,7 +39,8 @@ class Notification < ApplicationRecord
|
||||||
|
|
||||||
enum notification_type: NOTIFICATION_TYPES
|
enum notification_type: NOTIFICATION_TYPES
|
||||||
|
|
||||||
after_create_commit :process_notification_delivery
|
after_create_commit :process_notification_delivery, :dispatch_create_event
|
||||||
|
|
||||||
default_scope { order(id: :desc) }
|
default_scope { order(id: :desc) }
|
||||||
|
|
||||||
PRIMARY_ACTORS = ['Conversation'].freeze
|
PRIMARY_ACTORS = ['Conversation'].freeze
|
||||||
|
@ -108,4 +109,8 @@ class Notification < ApplicationRecord
|
||||||
# when push enabled and then check in email job whether notification has been read already.
|
# when push enabled and then check in email job whether notification has been read already.
|
||||||
Notification::EmailNotificationJob.perform_later(self)
|
Notification::EmailNotificationJob.perform_later(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dispatch_create_event
|
||||||
|
Rails.configuration.dispatcher.dispatch(NOTIFICATION_CREATED, Time.zone.now, notification: self)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,6 +39,9 @@ module Events::Types
|
||||||
CONTACT_MERGED = 'contact.merged'
|
CONTACT_MERGED = 'contact.merged'
|
||||||
CONTACT_DELETED = 'contact.deleted'
|
CONTACT_DELETED = 'contact.deleted'
|
||||||
|
|
||||||
|
# notification events
|
||||||
|
NOTIFICATION_CREATED = 'notification.created'
|
||||||
|
|
||||||
# agent events
|
# agent events
|
||||||
AGENT_ADDED = 'agent.added'
|
AGENT_ADDED = 'agent.added'
|
||||||
AGENT_REMOVED = 'agent.removed'
|
AGENT_REMOVED = 'agent.removed'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue