Module: SpreeCmCommissioner::OrderSeatable

Defined in:
app/models/concerns/spree_cm_commissioner/order_seatable.rb

Instance Method Summary collapse

Instance Method Details

#cancel_blocks!Object



15
16
17
18
19
20
21
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 15

def cancel_blocks!
  return unless should_manage_blocks?

  CmAppLogger.log(label: "#{self.class.name}#cancel_blocks!", data: { order_id: id }) do
    SpreeCmCommissioner::Seats::BlocksCanceler.new(order_id: id, cancel_by: user).cancel_blocks!
  end
end

#hold_blocks!Object



7
8
9
10
11
12
13
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 7

def hold_blocks!
  return unless should_manage_blocks?

  CmAppLogger.log(label: "#{self.class.name}#hold_blocks!", data: { order_id: id }) do
    SpreeCmCommissioner::Seats::BlocksHolder.new(line_item_ids: line_item_ids, hold_by: user).hold_blocks!
  end
end

#preload_block_idsObject



40
41
42
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 40

def preload_block_ids
  self.&.fetch('preload_block_ids', []) || []
end

#preload_block_ids=(preload_block_ids = []) ⇒ Object

Calling ‘.block_ids` directly can cause many slow database queries (N+1 problem) every time `.should_manage_blocks?` or `.preload_block_ids` runs. To avoid this, we store a precomputed list of block IDs in `private_metadata`. This list is updated whenever a guest’s block is saved or destroy.



35
36
37
38
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 35

def preload_block_ids=(preload_block_ids = [])
  self. ||= {}
  self.['preload_block_ids'] = preload_block_ids
end

#reserve_blocks!Object



23
24
25
26
27
28
29
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 23

def reserve_blocks!
  return unless should_manage_blocks?

  CmAppLogger.log(label: "#{self.class.name}#reserve_blocks!", data: { order_id: id }) do
    SpreeCmCommissioner::Seats::BlocksReserver.new(line_item_ids: line_item_ids, reserve_by: user).reserve_blocks!
  end
end

#should_manage_blocks?Boolean

Returns:

  • (Boolean)


3
4
5
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 3

def should_manage_blocks?
  preload_block_ids.any?
end