Module: Api::Vendor::V1::Klook::Concerns::ErrorResponses

Extended by:
ActiveSupport::Concern
Includes:
Concerns::ReservationUtils
Included in:
AvailabilitiesController, BookingsController, ProductsController
Defined in:
app/controllers/api/vendor/v1/klook/concerns/error_responses.rb

Instance Method Summary collapse

Instance Method Details

#render_error(data = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/controllers/api/vendor/v1/klook/concerns/error_responses.rb', line 11

def render_error(data = {})
  report_error(data)

  response_data = {
    error: data[:error],
    errorMessage: data[:error_message],
    errorDetail: data[:error_detail],
    productId: params[:productId],
    optionId: params[:optionId],
    availabilityId: params[:availabilityId],
    uuid: params[:uuid],
  }.compact
  VendorLogger.log_event(:response, params[:route], payload: response_data)
  render json: response_data, status: :bad_request
end

#report_error(data) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'app/controllers/api/vendor/v1/klook/concerns/error_responses.rb', line 27

def report_error(data)
  data[:data_snapshot] = params.to_unsafe_h.to_json
  error_heading = "Api:Klook:#{data[:method]}: #{data[:error_message]}"
  BUSINESS_LOGGER.error(error_heading, data: data, restaurant_id: params[:productId])
  return if hh_reservation_inventory_errors.include?(data[:error_detail] || data[:error_message])

  APMErrorHandler.report(error_heading, data: data)
  send_notify_email(error_heading, data)
end

#send_notify_email(error_heading, data) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'app/controllers/api/vendor/v1/klook/concerns/error_responses.rb', line 37

def send_notify_email(error_heading, data)
  return if data[:error] == ApiVendorV1::Constants::KLOOK_INVALID_PRODUCT_ID_ERROR ||
    data[:error] == ApiVendorV1::Constants::KLOOK_INVALID_OPTION_ID_ERROR

  receivers = [::MERCHANT_EMAIL, ::VENDOR_TEAM_EMAIL]
  subject = error_heading
  body = <<~BODY
    #{data}
  BODY
  StaffMailer.notify(subject, body, receivers).deliver_later!
end