auth_controller.rb 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # frozen_string_literal: true
  2. class API::AuthController < DeviseTokenAuth::ApplicationController
  3. attr_accessor :client_id, :token, :resource
  4. def execute
  5. # result = if params[:_json]
  6. # PokemonTradeSchema.multiplex(
  7. # params[:_json].map do |param|
  8. # {query: param[:query]}.merge(execute_params(param))
  9. # end,
  10. # )
  11. # else
  12. # PokemonTradeSchema.execute(params[:query], execute_params(params))
  13. # end
  14. # render json: result unless performed?
  15. result = PokemonTradeSchema.execute(
  16. params[:query],
  17. execute_params(params),
  18. )
  19. render json: result unless performed?
  20. rescue StandardError => e
  21. raise e unless Rails.env.development?
  22. handle_error_in_development(e)
  23. end
  24. private
  25. def execute_params(item)
  26. {
  27. operation_name: item[:operationName],
  28. variables: ensure_hash(item[:variables]),
  29. context: {controller: self},
  30. }
  31. end
  32. def ensure_hash(ambiguous_param)
  33. case ambiguous_param
  34. when String
  35. if ambiguous_param.present?
  36. ensure_hash(JSON.parse(ambiguous_param))
  37. else
  38. {}
  39. end
  40. when Hash, ActionController::Parameters
  41. ambiguous_param
  42. when nil
  43. {}
  44. else
  45. raise ArgumentError, "Unexpected parameter: #{ambiguous_param}"
  46. end
  47. end
  48. def handle_error_in_development(err)
  49. logger.error err.message
  50. logger.error err.backtrace.join("\n")
  51. render json: {
  52. errors: [{message: err.message, backtrace: err.backtrace}],
  53. data: {},
  54. }, status: :internal_server_error
  55. end
  56. end