-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsupport_tickets_controller.rb
39 lines (31 loc) · 1.21 KB
/
support_tickets_controller.rb
1
2
3
4
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
36
37
38
39
class SupportTicketsController < ApplicationController
rescue_from ZendeskAPI::Error::RecordInvalid, with: :handle_as_validation_error
rescue_from ZendeskAPI::Error::NetworkError, with: :cast_zendesk_api_error
def create
support_ticket = SupportTicket.new(support_ticket_attributes)
if support_ticket.valid?
GDS_ZENDESK_CLIENT.ticket.create!(support_ticket.zendesk_ticket_attributes)
render json: { status: "success" }, status: :created
else
render json: { status: "error", errors: support_ticket.errors }, status: :unprocessable_entity
end
end
private
def handle_as_validation_error(error)
render json: { status: "error", errors: error.message }, status: :unprocessable_entity
end
def cast_zendesk_api_error(error)
render json: { status: "error", errors: error.message }, status: error.response[:status]
end
def support_ticket_attributes
params.slice(
:subject, :description, :priority, :requester, :collaborators, :tags, :custom_fields, :ticket_form_id
).permit(
:subject, :description, :priority, :ticket_form_id,
requester: %i[locale_id email name],
collaborators: [],
tags: [],
custom_fields: %i[id value]
)
end
end