Module: MyMenu::ApiHelpers

Instance Method Summary collapse

Instance Method Details

#api_call(path, payload = {}, method = :get) ⇒ Object



20
21
22
23
24
25
26
27
# File 'app/services/my_menu/api_helpers.rb', line 20

def api_call(path, payload = {}, method = :get)
  url = "#{AdminSetting.mymenu_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

#channelObject



70
71
72
73
74
# File 'app/services/my_menu/api_helpers.rb', line 70

def channel
  return 'Hungry Hub' if parsed_vendor_name.blank?

  "Hungry Hub - #{parsed_vendor_name.downcase}"
end

#find_mymenu_vendor_applicationObject



76
77
78
79
# File 'app/services/my_menu/api_helpers.rb', line 76

def find_mymenu_vendor_application
  inv_source_name = ApiVendorV1::Constants::MYMENU_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/my_menu/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

#headersObject



12
13
14
15
16
17
18
# File 'app/services/my_menu/api_helpers.rb', line 12

def headers
  {
    'Cache-Control' => 'no-cache',
    'x-api-key' => ENV.fetch('MYMENU_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/my_menu/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/my_menu/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/my_menu/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/my_menu/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)
  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
124
# File 'app/services/my_menu/api_helpers.rb', line 98

def send_error_availability_notification_to_staff(
  reservation, error_message, date, start_time, party_size, _operation_type = :update
)

  return unless MyMenu::ErrorMessages::INVENTORY_ERRORS.include?(error_message)

  subject = "MyMenu: #{error_message}"
  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: #{error_message}
  BODY

  # Get account manager email if available
   = reservation.restaurant&.user&.email
  receivers = [::MERCHANT_EMAIL, ::VENDOR_TEAM_EMAIL]
  receivers <<  if .present?

  StaffMailer.notify_error_staff(subject, body, { receivers: receivers }).deliver_later!
end