lib/wolf_core/application/integrations/jobseeker_api_operations.rb



module WolfCore
  module Integrations
    module JobseekerApiOperations
      include WolfCore::HttpOperations

      def fetch_jobseeker_by_user_id!(wolf_token:, tenant:, wolf_platform_url:, user_id:)
        jobseekers = fetch_jobseekers!(
          wolf_token: wolf_token,
          tenant: tenant,
          wolf_platform_url: wolf_platform_url,
          query: { user_id: user_id }
        )
        jobseekers.first
      end

      def fetch_jobseekers!(wolf_token:, tenant:, wolf_platform_url:, error_message:, query: nil, error_data: nil)
        response = fetch_jobseekers(
          wolf_token: wolf_token,
          tenant: tenant,
          wolf_platform_url: wolf_platform_url,
          query: query
        )
        error_data ||= {}
        validate_http_response(response: response, message: error_message, error_data: error_data.merge(query: query))
        response.body.dig("data", "table", "jobseeker")
      end

      def fetch_jobseekers(wolf_token:, tenant:, wolf_platform_url:, query: nil)
        query ||= {}
        parsed_http_get(
          headers: { "Authorization" => "Bearer #{wolf_token}" },
          url: "#{wolf_platform_url}/api/v2/jobseekers",
          query: query.merge(tenant: tenant)
        )
      end

      def fetch_jobseeker!(wolf_token:, jobseeker_id:, tenant:, wolf_platform_url:, error_message:, query: nil, error_data: nil)
        response = fetch_jobseeker(
          wolf_token: wolf_token,
          jobseeker_id: jobseeker_id,
          tenant: tenant,
          wolf_platform_url: wolf_platform_url,
          query: query
        )
        error_data ||= {}
        validate_http_response(response: response, message: error_message, error_data: error_data.merge(jobseeker_id: jobseeker_id, query: query))
        response.body.dig("data", "table", "jobseeker")
      end

      def fetch_jobseeker(wolf_token:, jobseeker_id:, tenant:, wolf_platform_url:, query: nil)
        query ||= {}
        parsed_http_get(
          headers: { "Authorization" => "Bearer #{wolf_token}" },
          url: "#{wolf_platform_url}/api/v2/jobseekers/#{jobseeker_id}",
          query: query.merge(tenant: tenant)
        )
      end

      def create_jobseeker!(wolf_token:, jobseeker:, tenant:, wolf_platform_url:, error_message:, error_data: nil)
        response = create_jobseeker(
          wolf_token: wolf_token,
          jobseeker: jobseeker,
          tenant: tenant,
          wolf_platform_url: wolf_platform_url
        )
        error_data ||= {}
        validate_http_response(response: response, message: error_message, error_data: error_data.merge(jobseeker: jobseeker))
        response
      end

      def create_jobseeker(wolf_token:, jobseeker:, tenant:, wolf_platform_url:)
        parsed_http_post(
          headers: { "Authorization" => "Bearer #{wolf_token}" },
          query: { tenant: tenant },
          url: "#{wolf_platform_url}/api/v2/jobseekers",
          body: jobseeker
        )
      end

      def update_jobseeker!(wolf_token:, jobseeker:, tenant:, wolf_platform_url:, error_message:, jobseeker_id:, error_data: nil)
        response = update_jobseeker(
          wolf_token: wolf_token,
          jobseeker: jobseeker,
          tenant: tenant,
          wolf_platform_url: wolf_platform_url,
          jobseeker_id: jobseeker_id
        )
        error_data ||= {}
        validate_http_response(response: response, message: error_message, error_data: error_data.merge(jobseeker_id: jobseeker_id, jobseeker: jobseeker))
        response
      end

      def update_jobseeker(wolf_token:, jobseeker:, tenant:, wolf_platform_url:, jobseeker_id:)
        parsed_http_put(
          headers: { "Authorization" => "Bearer #{wolf_token}" },
          query: { tenant: tenant },
          url: "#{wolf_platform_url}/api/v2/jobseekers/#{jobseeker_id}",
          body: jobseeker
        )
      end
    end
  end
end