12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- class GraphqlController < ApplicationController
-
- skip_before_action :verify_csrf_token
- prepend_before_action lambda {
- begin
- authentication_check_only
- rescue Exceptions::Forbidden
-
- end
- }
- def execute
- if params[:_json]
- return render json: multiplex
- end
- render json: single_query
- rescue => e
- raise e if !Rails.env.development?
- handle_error_in_development(e)
- end
- private
- def multiplex
- queries = params[:_json].map do |param|
- {
- query: param[:query],
- operation_name: param[:operationName],
- variables: prepare_variables(param[:variables]),
- context: context
- }
- end
- Gql::ZammadSchema.multiplex(queries)
- end
- def single_query
- query = params[:query]
- variables = prepare_variables(params[:variables])
- operation_name = params[:operation_name]
- Gql::ZammadSchema.execute(query, variables: variables, context: context, operation_name: operation_name)
- end
- def context
-
- {
- sid: session.id,
- current_user: current_user,
-
- controller: self,
- }
- end
-
- def prepare_variables(variables_param)
- case variables_param
- when String
- if variables_param.present?
- JSON.parse(variables_param) || {}
- else
- {}
- end
- when Hash
- variables_param
- when ActionController::Parameters
- variables_param.to_unsafe_hash
- when nil
- {}
- else
- raise ArgumentError, "Unexpected parameter: #{variables_param}"
- end
- end
- def handle_error_in_development(e)
- logger.error e.message
- logger.error e.backtrace.join("\n")
- render json: { errors: [{ message: e.message, backtrace: e.backtrace }], data: {} }, status: :internal_server_error
- end
- end
|