Module: Api::Vendor::V1::Getyourguide::Concerns::Helpers
- Extended by:
- ActiveSupport::Concern
- Includes:
- Concerns::ReservationUtils
- Included in:
- AvailabilitiesController, BooksController, ReservesController
- Defined in:
- app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb
Overview
typed: ignore frozen_string_literal: true
Constant Summary collapse
- GYG_PRODUCT_PREFIX =
'RP'
Instance Method Summary collapse
- #find_channel_id! ⇒ Object
- #find_restaurant_package(gyg_option_id) ⇒ Object
- #load_restaurant_and_package(gyg_product_id, gyg_option_id) ⇒ Object
- #render_empty_response ⇒ Object
- #render_error_response(data) ⇒ Object
- #render_invalid_product ⇒ Object
- #render_invalid_reservation(reservation_id) ⇒ Object
- #render_invalid_ticket_category ⇒ Object
- #render_no_availability(error, backtrace: nil) ⇒ Object
- #render_validation_failure(error_message, reservation_id = nil) ⇒ Object
- #report_error(data) ⇒ Object
- #send_notify_email(data) ⇒ Object
- #valid_category?(category) ⇒ Boolean
Instance Method Details
#find_channel_id! ⇒ Object
28 29 30 31 32 33 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 28 def find_channel_id! channel = Channel.find_by(uri_name: ApiVendorV1::Constants::GET_YOUR_GUIDE_CHANNEL_URI) raise NotImplementedError, 'Failed to find channel' if channel.blank? channel.channel_id end |
#find_restaurant_package(gyg_option_id) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 35 def find_restaurant_package(gyg_option_id) rest_pack_id = GetyourguidePackage.find_by(restaurant_id: @restaurant.id, gyg_option_id: gyg_option_id)&.restaurant_package_id @restaurant_package = HhPackage::RestaurantPackage.valid_to_have_agendas_and_not_preview.find_by(id: rest_pack_id) if restaurant_package.blank? = "GetyourguidePackage not found for gyg_option_id: #{gyg_option_id}" BUSINESS_LOGGER.info( , { gyg_option_id: gyg_option_id, params: permitted_params }, ) APMErrorHandler.report(, params: permitted_params) return nil end restaurant_package end |
#load_restaurant_and_package(gyg_product_id, gyg_option_id) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 58 def load_restaurant_and_package(gyg_product_id, gyg_option_id) is_gyg_product_hh_package = gyg_product_id.to_s.start_with?(GYG_PRODUCT_PREFIX) if is_gyg_product_hh_package restaurant_package_id = gyg_product_id.delete_prefix(GYG_PRODUCT_PREFIX) @restaurant_package = HhPackage::RestaurantPackage.valid_to_have_agendas_and_not_preview.find_by(id: restaurant_package_id) return false if @restaurant_package.blank? @restaurant = @restaurant_package.restaurant return false if restaurant.blank? || !restaurant.active_and_not_expired? else @restaurant = Restaurant.active.not_expired.find_by(id: gyg_product_id) return false if restaurant.blank? @restaurant_package = find_restaurant_package(gyg_option_id) return false if restaurant_package.blank? end true end |
#render_empty_response ⇒ Object
107 108 109 110 111 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 107 def render_empty_response response = { data: {} } VendorLogger.log_event(:response, params[:route], payload: response) render json: response end |
#render_error_response(data) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 113 def render_error_response(data) report_error(data) response = { errorCode: data[:error_code], errorMessage: data[:error_message], detail: data[:error], } VendorLogger.log_event(:response, params[:route], payload: response) render json: response end |
#render_invalid_product ⇒ Object
78 79 80 81 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 78 def render_invalid_product render_error_response(error_code: ApiVendorV1::Constants::GYG_INVALID_PRODUCT, error_message: 'Invalid productId') end |
#render_invalid_reservation(reservation_id) ⇒ Object
88 89 90 91 92 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 88 def render_invalid_reservation(reservation_id) render_error_response(error_code: ApiVendorV1::Constants::GYG_INVALID_RESERVATION, error_message: 'Invalid reservation', reservation_id: reservation_id) end |
#render_invalid_ticket_category ⇒ Object
83 84 85 86 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 83 def render_invalid_ticket_category render_error_response(error_code: ApiVendorV1::Constants::GYG_INVALID_TICKET_CATEGORY, error_message: 'The ticket category is invalid') end |
#render_no_availability(error, backtrace: nil) ⇒ Object
100 101 102 103 104 105 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 100 def render_no_availability(error, backtrace: nil) render_error_response(error_code: ApiVendorV1::Constants::GYG_NO_AVAILABILITY, error_message: 'This activity is sold out', error: error, backtrace: backtrace) end |
#render_validation_failure(error_message, reservation_id = nil) ⇒ Object
94 95 96 97 98 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 94 def render_validation_failure(, reservation_id = nil) render_error_response(error_code: ApiVendorV1::Constants::GYG_VALIDATION_FAILURE, error_message: , reservation_id: reservation_id) end |
#report_error(data) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 126 def report_error(data) # Get product_id from instance variable or fallback to params product_id = gyg_product_id.presence || params.dig(:data, :productId) || params.dig(:book, :data, :productId) || 'unknown' = "getyourguide product_id #{product_id}: #{data[:error_code]}" log_type = data[:error_code] == ApiVendorV1::Constants::GYG_NO_AVAILABILITY ? :info : :error error_data = data.merge!(params.permit!).merge!(msg: ) error_data[:backtrace] = data[:backtrace] if data[:backtrace].present? BUSINESS_LOGGER.send(log_type, , data: error_data) APMErrorHandler.report(, data: error_data) send_notify_email(error_data) end |
#send_notify_email(data) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 141 def send_notify_email(data) return if hh_reservation_inventory_errors.include?(data[:error]) receivers = [::SUPPORT_EMAIL, ::SUPPORT_EMAIL_SLACK, ::VENDOR_TEAM_EMAIL] subject = data[:msg] body = <<~BODY Message: #{data[:]} Error: #{data[:error]} Additional_info: #{data.except(:error, :backtrace)} BODY # Include backtrace in email if available if data[:backtrace].present? body += <<~BACKTRACE Backtrace: #{data[:backtrace].is_a?(Array) ? data[:backtrace].join("\n") : data[:backtrace]} BACKTRACE end StaffMailer.notify_html(subject, body, receivers).deliver_later! end |
#valid_category?(category) ⇒ Boolean
54 55 56 |
# File 'app/controllers/api/vendor/v1/getyourguide/concerns/helpers.rb', line 54 def valid_category?(category) ApiVendorV1::Constants::GYG_CATEGORY_TYPES.include?(category) end |