Class: ZeroRailsAdapter::MutationsController

Inherits:
ActionController::API
  • Object
show all
Defined in:
app/controllers/zero_rails_adapter/mutations_controller.rb

Instance Method Summary collapse

Instance Method Details

#createObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/controllers/zero_rails_adapter/mutations_controller.rb', line 5

def create
  verify_request!
  identity = authenticate!
  zero_request = Request.parse(parsed_body, query: request.query_parameters)
  context = Context.new(identity:, request: zero_request, rack_request: request)

  render json: Processor.new(request: zero_request, context:).call, status: :ok
rescue JSON::ParserError => error
  render json: push_failed("parse", "Failed to parse push body: #{error.message}", []),
    status: :ok
rescue ParseError => error
  subject = error.source == :query ? "push query parameters" : "push body"
  render json: push_failed("parse", "Failed to parse #{subject}: #{error.message}", error.mutation_ids),
    status: :ok
rescue UnsupportedPushVersionError => error
  render json: push_failed("unsupportedPushVersion", error.message, error.mutation_ids),
    status: :ok
rescue UnauthorizedError => error
  render json: authentication_error(error), status: :unauthorized
rescue ForbiddenError => error
  render json: authentication_error(error), status: :forbidden
rescue StandardError => error
  ZeroRailsAdapter.configuration.logger&.error(
    "ZeroRailsAdapter request failed: #{error.class}: #{error.message}"
  )
  render json: push_failed(
    "internal",
    Processor::INTERNAL_ERROR_MESSAGE,
    []
  ), status: :internal_server_error
end