module Notifications
  class UpdateWorker
    include Sidekiq::Worker

    sidekiq_options queue: :medium_priority, retry: 10, lock: :until_executing

    def perform(notifiable_id, notifiable_class, action = nil)
      raise InvalidNotifiableForUpdate, notifiable_class unless %w[Article Comment].include?(notifiable_class)

      notifiable = notifiable_class.constantize.find_by(id: notifiable_id)

      return unless notifiable

      Notifications::Update.call(notifiable, action)
    end
  end

  class InvalidNotifiableForUpdate < StandardError; end
end
