Module: Inventory::InvCheckerHungryHubService::FindAvailableDates

Extended by:
ActiveSupport::Concern
Included in:
Inventory::InvCheckerHungryHubService
Defined in:
app/services/inventory/inv_checker_hungry_hub_service/find_available_dates.rb

Instance Method Summary collapse

Instance Method Details

#find_available_date(date, slug = nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/services/inventory/inv_checker_hungry_hub_service/find_available_dates.rb', line 53

def find_available_date(date, slug = nil)
  redis_cache_key = find_available_date_cache_key(date, slug)

  # Use empty hash as default for complex hash data
  result = data_store.fetch_mapped_hmget(redis_cache_key, [date], default_value: {}) do |missing_data|
    # Compute and store missing data
    computed = calc_find_available_date(date, slug)
    missing_data[date] = computed
  end
  
  result[date]
end

#find_available_dates_without_start_time(start_date:, end_date:, adult:, kids:) ⇒ Object

Parameters:

  • start_date (Date)
  • end_date (Date)


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
# File 'app/services/inventory/inv_checker_hungry_hub_service/find_available_dates.rb', line 14

def find_available_dates_without_start_time(start_date:, end_date:, adult:, kids:)
  start_date = Date.parse(start_date)
  end_date = Date.parse(end_date)
  expiry_date = restaurant.expiry_date

  dates = (start_date..end_date).to_a.select do |date|
    date.today? || !date.past?
  end

  dates.map do |date|
    if date > expiry_date
      Inventory::Constants::RestaurantPackages::NOT_BOOKABLE_ATTRIBUTE.merge('date' => date)
    else
      item = find_available_date(date, selected_slug)

      seat_left = item['seat_left']
      min_seat = item['min_seat']
      max_seat = item['max_seat']

      # adult=0 is minimum value for find available dates openrice project
      party_size = adult.to_i == 0 ? min_seat : adult.to_i
      availability = if item['availability']
                       if seat_left >= party_size
                         if min_seat.positive?
                           party_size.between?(min_seat, max_seat)
                         else
                           true
                         end
                       else
                         false
                       end
                     else
                       false
                     end
      item.merge('availability' => availability)
    end
  end
end

#set_find_available_date(date, slug = nil) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'app/services/inventory/inv_checker_hungry_hub_service/find_available_dates.rb', line 66

def set_find_available_date(date, slug = nil)
  redis_cache_key = find_available_date_cache_key(date, slug)
  computed_data = calc_find_available_date(date, slug)
  
  # Explicitly write to cache
  data_store.mapped_hmset(redis_cache_key, [date], date) do |data|
    data[date] = computed_data
  end
  
  computed_data
end