Module: Bistrochat::ApiHelpers
- Includes:
- MoneyRails::ActionViewExtension
- Included in:
- Bistrochat::Availabilities::Timetable, Blockages::Create, Blockages::Detail, Blockages::Update, Reservations::Cancel, Reservations::Create, Reservations::Detail, Reservations::Update, Restaurants::Detail
- Defined in:
- app/services/bistrochat/api_helpers.rb
Instance Method Summary collapse
- #api_call(path, payload = {}, method = :get) ⇒ Object
- #channel ⇒ Object
- #find_bistrochat_vendor_application ⇒ Object
- #get_purpose(occasion) ⇒ Object
- #headers ⇒ Object
- #parse_phone_number(phone_number = nil) ⇒ Object
- #parse_user_or_guest_full_name(reservation = nil) ⇒ Object
- #parsed_vendor_name(reservation) ⇒ Object
- #reservation_start_at(restaurant, date, start_time) ⇒ Object
- #send_error_availability_notification_to_staff(reservation, error_message, date, start_time, party_size, operation_type = :update) ⇒ Object
Instance Method Details
#api_call(path, payload = {}, method = :get) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'app/services/bistrochat/api_helpers.rb', line 20 def api_call(path, payload = {}, method = :get) url = "#{AdminSetting.bistrochat_host}/api/#{path}" FaradayCustomId.ensure_consistent do response = DefaultFaradayClient.create_faraday_connection.send(method, url, payload, headers) response_body = JSON.parse(response.body) if response.headers['content-type']&.include?('application/json') [response, response_body] end end |
#channel ⇒ Object
70 71 72 73 74 |
# File 'app/services/bistrochat/api_helpers.rb', line 70 def channel return 'Hungry Hub' if parsed_vendor_name.blank? "Hungry Hub - #{parsed_vendor_name.downcase}" end |
#find_bistrochat_vendor_application ⇒ Object
76 77 78 79 |
# File 'app/services/bistrochat/api_helpers.rb', line 76 def find_bistrochat_vendor_application inv_source_name = ApiVendorV1::Constants::BISTROCHAT_INV_SOURCE_NAME Doorkeeper::Application.find_by(name: inv_source_name) end |
#get_purpose(occasion) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'app/services/bistrochat/api_helpers.rb', line 81 def get_purpose(occasion) normalized_occasion = occasion.downcase.gsub(' ', '_') case normalized_occasion when 'birthday' 'birthday' when 'anniversary' 'date_anniversary' when 'business_meal' 'business' when 'date_night' 'date' else 'other' end end |
#headers ⇒ Object
12 13 14 15 16 17 18 |
# File 'app/services/bistrochat/api_helpers.rb', line 12 def headers { 'Cache-Control' => 'no-cache', 'Authorization' => ENV.fetch('BISTROCHAT_AUTH_ID', nil).to_s, 'Content-Type' => 'application/json', } end |
#parse_phone_number(phone_number = nil) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/services/bistrochat/api_helpers.rb', line 49 def parse_phone_number(phone_number = nil) if phone_number.blank? phone_number = AdminSetting.support_phones&.to_sentence.to_s end if phone_number[0] == '0' phone_number = phone_number.sub(/^0/, '+66') elsif phone_number[0] != '+' phone_number = "+#{phone_number}" end phone_number end |
#parse_user_or_guest_full_name(reservation = nil) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/services/bistrochat/api_helpers.rb', line 35 def parse_user_or_guest_full_name(reservation = nil) reservation_name = { first_name: 'HungryHub', last_name: 'Customer', } return reservation_name if reservation.blank? parsed_name = reservation.name.split reservation_name[:first_name] = parsed_name.first reservation_name[:last_name] = parsed_name.length > 1 ? parsed_name[1..].join(' ') : '' reservation_name end |
#parsed_vendor_name(reservation) ⇒ Object
63 64 65 66 67 68 |
# File 'app/services/bistrochat/api_helpers.rb', line 63 def parsed_vendor_name(reservation) vendor_name = reservation&.vendor_reservation&.oauth_application&.name return '' if vendor_name.blank? vendor_name.to_s.split('HH x ').last end |
#reservation_start_at(restaurant, date, start_time) ⇒ Object
29 30 31 32 33 |
# File 'app/services/bistrochat/api_helpers.rb', line 29 def reservation_start_at(restaurant, date, start_time) Time.use_zone restaurant.time_zone do Time.zone.parse(start_time, date.to_date).utc.iso8601 end end |
#send_error_availability_notification_to_staff(reservation, error_message, date, start_time, party_size, operation_type = :update) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'app/services/bistrochat/api_helpers.rb', line 98 def send_error_availability_notification_to_staff( reservation, , date, start_time, party_size, operation_type = :update ) return unless Bistrochat::ErrorMessages::INVENTORY_ERRORS.include?() subject = "Bistrochat #{operation_type.capitalize}: #{}" body = <<~BODY #{if reservation.old_reservation_id.present? "Old Reservation ID: #{reservation.old_reservation_id}<br>New Reservation ID: #{reservation.id}<br>" else "Reservation ID: #{reservation.id}<br>" end} Restaurant: #{reservation.restaurant&.name_en}<br> Date: #{date}<br> Time: #{start_time}<br> Party Size: #{party_size}<br> Message: #{} BODY # Get account manager email if available account_manager_email = reservation.restaurant&.user&.email receivers = [::MERCHANT_EMAIL, ::VENDOR_TEAM_EMAIL] receivers << account_manager_email if account_manager_email.present? StaffMailer.notify_error_staff(subject, body, { receivers: receivers }).deliver_later! end |