lib/wolf_core/application/integrations/webhooks_operations.rb
module WolfCore module Integrations module WebhooksOperations def get_payload(params:, event_type: nil) event_type ||= get_event_type(params: params) return if event_type == 'SubscriptionConfirmation' params = JSON.parse(params['Message'] || '{}') JSON.parse(params['payload'] || '{}') end def get_event_type(params:) params['Type'] end def get_event_name(params:) message = JSON.parse(params['Message'] || {}) message['event_name'] end def validate_user_is_not_admin(params:) event_type = get_event_type(params: params) return if event_type == 'SubscriptionConfirmation' user_id = params.dig('invoker', 'user_id').to_s return unless user_id == ENV['WOLF_ADMIN_ID'].to_s raise_service_error("Ignoring event from user id #{user_id}") end def subscription_confirmation_request(url:) safe_http_get( url: url, error_message: "Can not confirm subscription", ) end def process_webhook(params:) event_type = get_event_type(params: params) if event_type == 'SubscriptionConfirmation' url = params['SubscribeURL'] subscription_confirmation_request(url: url) elsif event_type == 'Notification' event_name = get_event_name(params: params) yield(event_name) end end def build_body_from_params(params:, id_key:, include_changes: false) body = { event_name: get_event_name(params: params), id_key => get_object_id(params: params) } if include_changes payload = get_payload(params: params) body[:changes] = payload&.dig('changes') end body end def get_object_id(params:) params = JSON.parse(params['Message'] || '{}') params['object_id'] end def group_custom_values_by_custom_requirement_group( payload:, jobseeker_file_custom_requirement_ids:, reference_form_custom_requirement_ids:, disclosure_form_custom_requirement_ids: ) custom_values = payload.dig('changes', 'custom_values') if custom_values.blank? custom_values = [ payload['attributes'] ] end custom_values.group_by do |custom_value| custom_requirement_group = if jobseeker_file_custom_requirement_ids.include?(custom_value['custom_requirement_id'].to_s) 'jobseeker_file' elsif reference_form_custom_requirement_ids.include?(custom_value['custom_requirement_id'].to_s) 'reference_form' elsif disclosure_form_custom_requirement_ids.include?(custom_value['custom_requirement_id'].to_s) 'disclosure_form' elsif custom_value['user_category'] == 'Freelancer' 'jobseeker' elsif custom_value['user_category'] == 'Campaign' 'order' else 'unknown_group' end custom_requirement_group end end end end end