docbrown/app/services/notifications/update.rb
Anna Buianova 784afdf41e
Routine rubocop fixes (#19254)
* Rubocop fixes

* Rubocop fixes

* Fixed rubocop violation

* Fixed policies rubocop violations

* More rubocop fixes
2023-03-24 14:37:44 +03:00

39 lines
1.2 KiB
Ruby

module Notifications
class Update
delegate :article_data, :comment_data, :user_data, :organization_data, to: Notifications
def self.call(...)
new(...).call
end
def initialize(notifiable, action = nil)
@notifiable = notifiable
@action = action
end
def call
return unless [Article, Comment].include?(notifiable.class)
notifications = Notification.where(
notifiable_id: notifiable.id,
notifiable_type: notifiable.class.name,
action: action,
)
# as we only select the first notification right after, there is no need
# to load all of them in memory with `.blank?`, thus we choose `.none?`
return if notifications.none?
new_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)
add_organization_data = notifiable.is_a?(Article) && notifiable.organization
new_json_data[:organization] = organization_data(notifiable.organization) if add_organization_data
notifications.update_all(json_data: new_json_data)
end
private
attr_reader :notifiable, :action
end
end