| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # frozen_string_literal: true
- class API::GraphqlController < API::ApplicationController
- include UserAuthentication
- def execute
- render json: PokemonTradeSchema.execute(
- params[:query],
- execute_params(params),
- )
- rescue StandardError => e
- raise e unless Rails.env.development?
- handle_error_in_development(e)
- end
- private
- def execute_params(hash)
- {
- operation_name: hash[:operationName],
- variables: ensure_hash(hash[:variables]),
- context: {controller: self, current_user: current_user},
- }
- end
- # Handle form data, JSON body, or a blank value
- def ensure_hash(ambiguous_param)
- case ambiguous_param
- when String
- if ambiguous_param.present?
- ensure_hash(JSON.parse(ambiguous_param))
- else
- {}
- end
- when Hash, ActionController::Parameters
- ambiguous_param
- when nil
- {}
- else
- raise ArgumentError, "Unexpected parameter: #{ambiguous_param}"
- end
- end
- def handle_error_in_development(err)
- logger.error err.message
- logger.error err.backtrace.join("\n")
- render json: {
- errors: [{message: err.message, backtrace: err.backtrace}],
- data: {},
- }, status: :internal_server_error
- end
- end
|