Module: SpreeCmCommissioner::OrderSeatable
- Defined in:
- app/models/concerns/spree_cm_commissioner/order_seatable.rb
Instance Method Summary collapse
- #cancel_blocks! ⇒ Object
- #hold_blocks! ⇒ Object
- #preload_block_ids ⇒ Object
-
#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.
- #reserve_blocks! ⇒ Object
- #should_manage_blocks? ⇒ Boolean
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_ids ⇒ Object
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
3 4 5 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 3 def should_manage_blocks? preload_block_ids.any? end |