| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # frozen_string_literal: true
- class API::GraphqlController < API::ApplicationController
- def execute
- variables = ensure_hash(params[:variables])
- query = params[:query]
- operation_name = params[:operationName]
- context = {
- # Query context goes here, for example:
- # current_user: current_user,
- }
- result = PokemonTradeSchema.execute(query, variables: variables, context: context, operation_name: operation_name)
- render json: result
- rescue StandardError => e
- raise e unless Rails.env.development?
- handle_error_in_development(e)
- end
- private
- # 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
|