feat: Notification action cable event (#4154)

This commit is contained in:
Muhsin Keloth 2022-03-17 18:56:36 +05:30 committed by GitHub
parent 430547e026
commit 23fe8847d8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 1 deletions

View file

@ -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:

View file

@ -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

View file

@ -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]

View file

@ -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

View file

@ -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'