diff --git a/app/jobs/remove_abandoned_creations_job.rb b/app/jobs/remove_abandoned_creations_job.rb new file mode 100644 index 000000000..668da5993 --- /dev/null +++ b/app/jobs/remove_abandoned_creations_job.rb @@ -0,0 +1,7 @@ +class RemoveAbandonedCreationsJob < ApplicationJob + queue_as :default + + def perform + Bubble.remove_abandoned_creations + end +end diff --git a/app/models/bubble/statuses.rb b/app/models/bubble/statuses.rb index 7c01ed012..0ac59e15b 100644 --- a/app/models/bubble/statuses.rb +++ b/app/models/bubble/statuses.rb @@ -7,6 +7,12 @@ module Bubble::Statuses scope :published_or_drafted_by, ->(user) { where(status: :published).or(where(status: :drafted, creator: user)) } end + class_methods do + def remove_abandoned_creations + Bubble.creating.where(updated_at: ..1.day.ago).destroy_all + end + end + def can_recover_abandoned_creation? abandoned_creations.where(updated_at: 1.day.ago..).any? end diff --git a/config/recurring.yml b/config/recurring.yml index d045b1914..816edb127 100644 --- a/config/recurring.yml +++ b/config/recurring.yml @@ -1,10 +1,4 @@ -# production: -# periodic_cleanup: -# class: CleanSoftDeletedRecordsJob -# queue: background -# args: [ 1000, { batch_size: 500 } ] -# schedule: every hour -# periodic_command: -# command: "SoftDeletedRecord.due.delete_all" -# priority: 2 -# schedule: at 5am every day +production: + remove_abandoned_creations: + class: RemoveAbandonedCreationsJob + schedule: every hour diff --git a/test/models/bubble/statuses_test.rb b/test/models/bubble/statuses_test.rb index a63525b2d..9f846efd6 100644 --- a/test/models/bubble/statuses_test.rb +++ b/test/models/bubble/statuses_test.rb @@ -47,4 +47,15 @@ class Bubble::StatusesTest < ActiveSupport::TestCase assert_raises(ActiveRecord::RecordNotFound) { bubble_not_edited.reload } end + + test "remove_abandoned_creations" do + bubble_old = buckets(:writebook).bubbles.create! creator: users(:kevin), updated_at: 2.days.ago + bubble_recent = buckets(:writebook).bubbles.create! creator: users(:kevin) + + assert_equal 2, Bubble.creating.count + + Bubble.remove_abandoned_creations + + assert_equal [ bubble_recent ], Bubble.creating + end end