| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # frozen_string_literal: true
- class API::AuthController < DeviseTokenAuth::ApplicationController
- attr_accessor :client_id, :token, :resource
- def execute
- # result = if params[:_json]
- # PokemonTradeSchema.multiplex(
- # params[:_json].map do |param|
- # {query: param[:query]}.merge(execute_params(param))
- # end,
- # )
- # else
- # PokemonTradeSchema.execute(params[:query], execute_params(params))
- # end
- # render json: result unless performed?
- result = PokemonTradeSchema.execute(
- params[:query],
- execute_params(params),
- )
- render json: result unless performed?
- rescue StandardError => e
- raise e unless Rails.env.development?
- handle_error_in_development(e)
- end
- private
- def execute_params(item)
- {
- operation_name: item[:operationName],
- variables: ensure_hash(item[:variables]),
- context: {controller: self},
- }
- end
- 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
|