Class: SpreeCmCommissioner::Seats::BulkReleaseOnHoldBlocks

Inherits:
Object
  • Object
show all
Defined in:
app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb

Instance Method Summary collapse

Constructor Details

#initialize(cutoff_days: 7) ⇒ BulkReleaseOnHoldBlocks

Returns a new instance of BulkReleaseOnHoldBlocks.



4
5
6
# File 'app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb', line 4

def initialize(cutoff_days: 7)
  @cutoff_days = cutoff_days
end

Instance Method Details

#callObject

Bulk releases stale on_hold blocks as a housekeeping job. Runs weekly to catch any blocks that didn’t expire properly.

This is a FULL release - releases ALL on_hold blocks older than cutoff_days. Complements ReleaseExpiredBlocks which runs every 5 minutes.



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
# File 'app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb', line 13

def call
  cutoff_time = @cutoff_days.days.ago

  stale_blocks = SpreeCmCommissioner::ReservedBlock
                 .on_hold
                 .where('created_at < ?', cutoff_time)

  count = stale_blocks.count

  # Transition all stale blocks to canceled status
  stale_blocks.update_all( # rubocop:disable Rails/SkipsModelValidations
    status: :canceled,
    expired_at: nil,
    updated_by_id: nil,
    updated_at: Time.current
  )

  CmAppLogger.log(
    label: 'SpreeCmCommissioner::Seats::BulkReleaseOnHoldBlocks#call',
    data: {
      released_count: count,
      cutoff_days: @cutoff_days,
      cutoff_time: cutoff_time,
      job_type: 'bulk_release'
    }
  )
end