summaryrefslogtreecommitdiff
path: root/app/workers/prune_old_events_worker.rb
blob: dc4b7670131ff03471f2380b019ba39a5659b9a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# frozen_string_literal: true

class PruneOldEventsWorker
  include ApplicationWorker
  include CronjobQueue

  # rubocop: disable CodeReuse/ActiveRecord
  def perform
    # Contribution calendar shows maximum 12 months of events, we retain 2 years for data integrity.
    # Double nested query is used because MySQL doesn't allow DELETE subqueries on the same table.
    Event.unscoped.where(
      '(id IN (SELECT id FROM (?) ids_to_remove))',
      Event.unscoped.where(
        'created_at < ?',
        (2.years + 1.day).ago)
      .select(:id)
      .limit(10_000))
    .delete_all
  end
  # rubocop: enable CodeReuse/ActiveRecord
end