Class: Api::Vendor::V1::Klook::AvailabilitySerializer

Inherits:
BaseSerializer
  • Object
show all
Includes:
Concerns::SerializerUtils
Defined in:
app/serializers/api/vendor/v1/klook/availability_serializer.rb

Instance Method Summary collapse

Methods inherited from BaseSerializer

enable_caching

Constructor Details

#initialize(data) ⇒ AvailabilitySerializer

Returns a new instance of AvailabilitySerializer.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'app/serializers/api/vendor/v1/klook/availability_serializer.rb', line 5

def initialize(data)
  super()
  @availability_data = data.availability_data
  @restaurant_package = data.restaurant_package
  @units = data.units
  @method_name = data.method_name
  @max_units = data.respond_to?(:max_units) ? data.max_units : nil
  @utc_cutoff_minutes = (data.respond_to?(:utc_cutoff_minutes) ? data.utc_cutoff_minutes : nil).to_i.minutes
  @pkg_type = @restaurant_package&.package&.dynamic_price_pricing_model&.to_sym == :per_pack ? 'pack' : 'adult'
  @unit_pricing_key = @method_name == :calendar ? :unitPricingFrom : :unitPricing
  @total_pricing_key = @method_name == :calendar ? :pricingFrom : :pricing
  @unit_pricings = get_unit_pricings
  @total_pricings = get_total_pricings
end

Instance Method Details

#as_jsonObject



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
# File 'app/serializers/api/vendor/v1/klook/availability_serializer.rb', line 20

def as_json(*)
  @availability_data.map do |d|
    date = [d[:local_date], d[:local_date_time_start]].compact.first
    day_name = Date.parse(date).strftime('%A') if date
    open_time, close_time = get_restaurant_package_open_close_times(@restaurant_package, day_name)
    opening_hours = format_availability_opening_hours(open_time, close_time)
    data = {
      id: d[:local_date_time_start] || nil,
      localDate: d[:local_date] || nil,
      localDateTimeStart: d[:local_date_time_start] || nil,
      localDateTimeEnd: d[:local_date_time_end] || nil,
      allDay: false,
      available: d[:available],
      status: availability_status(d[:available]),
      vacancies: d[:vacancies],
      capacity: d[:capacity],
      utcCutoffAt: d[:local_date_time_start]&.then { |t| (Time.iso8601(t).utc - @utc_cutoff_minutes).iso8601 },
      openingHours: opening_hours,
      @unit_pricing_key => @unit_pricings,
      @total_pricing_key => @total_pricings,
    }.compact
    # since we have to pass maxUnits only for the check method, and it can be NULL too for per_pack packages
    data[:maxUnits] = @max_units if @method_name == :check
    data
  end
end