about summary refs log tree commit diff
path: root/app/services/send_push_notification_service.rb
blob: 802614fce68030607f4ab4d78fe4ba8df26b05a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# frozen_string_literal: true

class SendPushNotificationService < BaseService
  def call(notification)
  	return if ENV['FCM_API_KEY'].blank?

  	devices = Device.where(account: notification.account).pluck(:registration_id)
  	fcm     = FCM.new(ENV['FCM_API_KEY'])

  	response = fcm.send(devices, data: { notification_id: notification.id }, collapse_key: :notifications, priority: :high)
  	handle_response(response)
  end

  private

  def handle_response(response)
    update_canonical_ids(response[:canonical_ids]) if response[:canonical_ids]
    remove_bad_ids(response[:not_registered_ids])  if response[:not_registered_ids]
  end

  def update_canonical_ids(ids)
  	ids.each { |pair| Device.find_by(registration_id: pair[:old]).update(registration_id: pair[:new]) }
  end

  def remove_bad_ids(bad_ids)
  	Device.where(registration_id: bad_ids).delete_all
  end
end