Class: Inventory::UpdateInBgWorker

Inherits:
ApplicationWorker show all
Defined in:
app/workers/inventory/update_in_bg_worker.rb

Instance Method Summary collapse

Methods inherited from ApplicationWorker

unlimited_retry

Instance Method Details

#perform(ids, quantity_available, inv_type) ⇒ Object



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
56
57
58
59
60
# File 'app/workers/inventory/update_in_bg_worker.rb', line 6

def perform(ids, quantity_available, inv_type)
  # determine the model based on the inv_type
  inv_model = inv_type.to_s == 'dine_in' ? Inventory : InventoryTakeAway
  restaurant_id = nil
  updated_inventories = []

  # update each inventory with the given quantity_available
  inv_model.where(id: ids).find_each do |inventory|
    restaurant_id = inventory.restaurant_id
    inventory.update!(quantity_available: quantity_available)
    updated_inventories << { inventory: inventory, restaurant_id: restaurant_id }
  end

  if updated_inventories.present?
    inv_date_range = extract_inv_date_range(updated_inventories)
    # to update the inventories.total_booked_seat
    InventoryReservationWorker.perform_async(restaurant_id, inv_date_range[:start_date], inv_date_range[:end_date])

    # refresh restaurant cache
    processed_dates = (inv_date_range[:start_date]..inv_date_range[:end_date]).to_a
    processed_dates.in_groups_of(1000, false).each do |dates|
      Karafka.producer.produce_async(
        topic: EVENTS::INVENTORY::CACHE::TOPIC,
        payload: {
          event_type: EVENTS::INVENTORY::CACHE::TYPES::RESET_CACHE,
          restaurant_id: restaurant_id,
          restaurant_level: true,
          dates: dates,
          class_name: self.class.name,
          triggered_at: Time.current.to_s,
          # Debug attributes
          trigger_method: 'perform',
          trigger_context: {
            worker_job: true,
            background_update: true,
            dates_batch_size: dates.count,
            total_processed_dates: processed_dates.count,
            inv_date_range: inv_date_range,
            updated_inventories_count: updated_inventories.count,
          },
          caller: Rails.backtrace_cleaner.clean(caller),
        }.to_json,
      )
    end
    Rails.logger.info "Published cache reset event for restaurant \\#{restaurant_id}"

    # schedule a worker to notify GetYourGuide about the inventory update
    ::Vendors::Getyourguide::NotifyWorker.perform_async([restaurant_id])

    # send update inventory event to kafka
    send_update_inventory_event(updated_inventories, inv_date_range)
  end

  true
end