SouthernMade/sm_sms_campaign_webhook

View on GitHub
app/operations/sm_sms_campaign_webhook/payload_operation.rb

Summary

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

module SmSmsCampaignWebhook
  # Handles payload data modeling and data processing.
  class PayloadOperation
    # @param payload [Hash] Deserialized payload from SMS campaign service
    # @see ProcessCampaignEngagementJob#perform
    def self.dispatch(payload:)
      logger.debug "#{name} - Dispatching payload: #{payload.inspect}"

      case payload.fetch("type", "unknown")
      when "campaign.engagement"
        ProcessCampaignEngagementJob.perform_later(payload)
      else
        # NOOP - Unsupported event type.
        logger.warn "#{name} - Unsupported event type"
      end
    end

    # @return [ActiveSupport::Logger] Abstraction of app logger
    def self.logger
      @logger ||= Rails.logger
    end
    private_class_method :logger
  end
end