push_notification_worker.rb 622 B

123456789101112131415161718192021222324
  1. # frozen_string_literal: true
  2. class Web::PushNotificationWorker
  3. include Sidekiq::Worker
  4. sidekiq_options backtrace: true, retry: 5
  5. def perform(subscription_id, notification_id)
  6. subscription = ::Web::PushSubscription.find(subscription_id)
  7. notification = Notification.find(notification_id)
  8. subscription.push(notification) unless notification.activity.nil?
  9. rescue Webpush::ResponseError => e
  10. code = e.response.code.to_i
  11. if (400..499).cover?(code) && ![408, 429].include?(code)
  12. subscription.destroy!
  13. else
  14. raise e
  15. end
  16. rescue ActiveRecord::RecordNotFound
  17. true
  18. end
  19. end