Module: Api::Vendor::V1::GoogleReserve::Concerns::ErrorResponses

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

Overview

typed: ignore frozen_string_literal: true

Instance Method Summary collapse

Instance Method Details

#render_booking_not_cancellable(error_message) ⇒ Object



20
21
22
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 20

def render_booking_not_cancellable(error_message)
  render_error_response(@restaurant.id, ApiVendorV1::Constants::RWG_BOOKING_NOT_CANCELLABLE, :ok, error_message)
end

#render_cause_unspecified(error_message, merchant_id = nil, booking_id = nil, room_id = nil) ⇒ Object



8
9
10
11
12
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 8

def render_cause_unspecified(error_message, merchant_id = nil, booking_id = nil, room_id = nil)
  restaurant_id = merchant_id || @restaurant&.id
  render_error_response(restaurant_id, ApiVendorV1::Constants::RWG_CAUSE_UNSPECIFIED, :bad_request, error_message,
                        reservation_id: booking_id, restaurant_package_id: room_id)
end

#render_error_response(restaurant_id, error_code, status_code, error_message, additional_data = {}) ⇒ Object



24
25
26
27
28
29
30
31
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 24

def render_error_response(restaurant_id, error_code, status_code, error_message, additional_data = {})
  report_error(restaurant_id, error_code, error_message, additional_data)
  response_payload = { booking_failure: { cause: error_code, description: error_message } }

  VendorLogger.log_event(:response, params[:route], payload: response_payload.merge(status_code: status_code))

  render json: response_payload, status: status_code
end

#render_slot_unavailable(error_detail, error_backtrace = nil) ⇒ Object



14
15
16
17
18
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 14

def render_slot_unavailable(error_detail, error_backtrace = nil)
  render_error_response(@restaurant.id, ApiVendorV1::Constants::RWG_SLOT_UNAVAILABLE, :ok,
                        ApiVendorV1::Constants::RWG_SLOT_UNAVAILABLE_MSG,
                        error_detail: error_detail, error_backtrace: error_backtrace)
end

#report_error(restaurant_id, error_code, error_message, additional_data) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 33

def report_error(restaurant_id, error_code, error_message, additional_data)
  message = "GoogleReserve restaurant_id #{restaurant_id}: #{error_code}"
  log_type = error_code == ApiVendorV1::Constants::RWG_SLOT_UNAVAILABLE ? :info : :error
  additional_data.merge!(params: params.permit!)

  BUSINESS_LOGGER.set_business_context({ restaurant_id: params.dig(:slot, :merchant_id).to_s.split('-')[1].to_i })
  BUSINESS_LOGGER.send(log_type, message, error_message: error_message, data: additional_data)

  APMErrorHandler.report(message, error_message: error_message, data: additional_data) if log_type == :error
  send_notify_email(message, error_message, additional_data)
end

#send_notify_email(message, error_message, additional_data) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/controllers/api/vendor/v1/google_reserve/concerns/error_responses.rb', line 45

def send_notify_email(message, error_message, additional_data)
  return if hh_reservation_inventory_errors.include?(error_message)

  additional_data.delete(:error_backtrace)
  receivers = [::SUPPORT_EMAIL, ::SUPPORT_EMAIL_SLACK, ::VENDOR_TEAM_EMAIL]
  subject = message
  body = <<~BODY
    Message: #{error_message},
    Additional_info: #{additional_data}
  BODY
  StaffMailer.notify(subject, body, receivers).deliver_later!
end