OfficeMomsandDads/scheduler

View on GitHub
app/lib/services/notifications/shifts.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module Services
  module Notifications
    class Shifts
      include Adamantium::Flat

      attr_accessor :message, :recipients, :shift

      def initialize(shift, action, event_data = {})
        self.message    = Message.new(shift, action, event_data).message
        self.recipients = Recipients.new(shift, action, event_data).recipients
        self.shift = shift
      end

      def notify
        Services::TextMessageEnqueue.send_messages(phone_numbers, message)
        Services::EmailMessageEnqueue.send_messages(email_addresses, message)
        shift.need.notified_user_ids |= recipients.map(&:id)
        shift.need.save!

        yield(self) if block_given?
      end

      def phone_numbers
        recipients.select(&:receive_sms_notifications?).map(&:phone)
      end

      def email_addresses
        recipients.select(&:receive_email_notifications?).map(&:email)
      end
    end
  end
end