Class: Api::Vendor::V1::Getyourguide::AvailabilitiesController

Inherits:
BaseController show all
Includes:
Concerns::ChargeCalculatorHelper, Concerns::Helpers
Defined in:
app/controllers/api/vendor/v1/getyourguide/availabilities_controller.rb

Instance Attribute Summary

Attributes inherited from BaseController

#vendor

Instance Method Summary collapse

Methods inherited from BaseController

#authentication

Methods included from ResponseCacheConcern

#my_response_cache

Methods inherited from ApplicationController

#after_sign_in_path_for, #after_sign_out_path_for, #default_url_options, #identity_cache_memoization, #render_not_found, #routing_error, search_params_key=

Methods included from LogrageCustomLogger

#append_info_to_payload

Methods included from ControllerHelpers

#check_boolean_param, #get_banners, #inventory_params, #reservation_params

Instance Method Details

#indexObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/api/vendor/v1/getyourguide/availabilities_controller.rb', line 6

def index
  %i[productId fromDateTime toDateTime].each { |key| params.require(key) }
  @permitted_params = params.permit(:productId, :fromDateTime, :toDateTime)

  BUSINESS_LOGGER.set_business_context({ vendor_name: ApiVendorV1::Constants::GET_YOUR_GUIDE_VENDOR_NAME })

  @gyg_product_id = permitted_params[:productId].to_s
  @is_gyg_product_hh_package = gyg_product_id.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 render_invalid_product if @restaurant_package.blank?

    @restaurant = @restaurant_package.restaurant
    return render_invalid_product if restaurant.blank? || !restaurant.active_and_not_expired?
  else
    @restaurant = Restaurant.active.not_expired.find_by(id: gyg_product_id)
    return render_invalid_product if restaurant.blank?
  end

  inv_checker_service = restaurant.create_inv_checkers.first
  inv_checker_service.for_delivery = false
  inv_checker_service.for_dine_in = true
  inv_checker_service.restaurant_package_ids = [restaurant_package&.id]

  kid = 0
  adult = if is_gyg_product_hh_package
            min_seat = restaurant_package.package&.decide_min_seat
            is_per_pack = restaurant_package.package&.dynamic_price_pricing_model&.to_sym == :per_pack
            per_pack_qty = is_per_pack ? restaurant_package&.package&.dynamic_pricings&.first&.per_pack.to_i : 1
            [min_seat, per_pack_qty].max
          else
            restaurant.restaurant_packages.valid_to_have_agendas.map do |rp|
              rp.package&.decide_min_seat
            end.compact.max
          end

  start_date = permitted_params[:fromDateTime].to_date
  end_date = permitted_params[:toDateTime].to_date
  min_booking_time_in_seconds = calculate_min_booking_time_seconds

  availability_start_times = fetch_availability_start_times(inv_checker_service, adult, kid, start_date..end_date)
  availability_data = prepare_availability_data(start_date..end_date, availability_start_times,
                                                min_booking_time_in_seconds, adult)

  response = { data: { availabilities: availability_data } }

  render json: response
end