Add status expiration

This commit is contained in:
KMY 2023-03-21 11:12:33 +09:00
parent 57c12e4fad
commit 16079b4db5
11 changed files with 120 additions and 1 deletions

View 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

View file

@ -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)