docbrown/app/services/notifications/update.rb
Anna Buianova dd0fbf002b ActiveJob for updating notifications #1996 (#2839)
* Notifications::Update service

* Update notifications ActiveJob

* Raise an exception when wrong notifiable class passed to a job
2019-05-15 12:37:25 -04:00

35 lines
1 KiB
Ruby

module Notifications
class Update
delegate :article_data, :comment_data, :user_data, :organization_data, to: Notifications
def initialize(notifiable, action = nil)
@notifiable = notifiable
@action = action
end
def self.call(*args)
new(*args).call
end
def call
return unless [Article, Comment].include?(notifiable.class)
notifications = Notification.where(
notifiable_id: notifiable.id,
notifiable_type: notifiable.class.name,
action: action,
)
return if notifications.blank?
new_json_data = notifications.first.json_data || {}
new_json_data[notifiable.class.name.downcase] = public_send("#{notifiable.class.name.downcase}_data", notifiable)
new_json_data[:user] = user_data(notifiable.user)
new_json_data[:organization] = organization_data(notifiable.organization) if notifiable.is_a?(Article) && notifiable.organization_id
notifications.update_all(json_data: new_json_data)
end
private
attr_reader :notifiable, :action
end
end