Add status expiration
This commit is contained in:
parent
57c12e4fad
commit
16079b4db5
11 changed files with 120 additions and 1 deletions
16
app/workers/remove_expired_status_worker.rb
Normal file
16
app/workers/remove_expired_status_worker.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveExpiredStatusWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options lock: :until_executed
|
||||
|
||||
def perform(scheduled_expiration_status_id)
|
||||
scheduled_expiration_status = ScheduledExpirationStatus.find(scheduled_expiration_status_id)
|
||||
scheduled_expiration_status.destroy!
|
||||
|
||||
RemoveStatusService.new.call(scheduled_expiration_status.status)
|
||||
rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid
|
||||
true
|
||||
end
|
||||
end
|
|
@ -7,6 +7,7 @@ class Scheduler::ScheduledStatusesScheduler
|
|||
|
||||
def perform
|
||||
publish_scheduled_statuses!
|
||||
unpublish_expired_statuses!
|
||||
publish_scheduled_announcements!
|
||||
unpublish_expired_announcements!
|
||||
end
|
||||
|
@ -19,10 +20,20 @@ class Scheduler::ScheduledStatusesScheduler
|
|||
end
|
||||
end
|
||||
|
||||
def unpublish_expired_statuses!
|
||||
expired_statuses.find_each do |expired_status|
|
||||
RemoveExpiredStatusWorker.perform_at(expired_status.scheduled_at, expired_status.id)
|
||||
end
|
||||
end
|
||||
|
||||
def due_statuses
|
||||
ScheduledStatus.where('scheduled_at <= ?', Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET)
|
||||
end
|
||||
|
||||
def expired_statuses
|
||||
ScheduledExpirationStatus.where('scheduled_at <= ?', Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET)
|
||||
end
|
||||
|
||||
def publish_scheduled_announcements!
|
||||
due_announcements.find_each do |announcement|
|
||||
PublishScheduledAnnouncementWorker.perform_at(announcement.scheduled_at, announcement.id)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue