summaryrefslogtreecommitdiff
path: root/db/post_migrate/20210823132600_remove_duplicate_dast_site_tokens.rb
blob: 35cf3b552001e2e0ca4e6c133feba951a3a013db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# frozen_string_literal: true

class RemoveDuplicateDastSiteTokens < ActiveRecord::Migration[6.1]
  disable_ddl_transaction!

  class DastSiteToken < ApplicationRecord
    self.table_name = 'dast_site_tokens'
    self.inheritance_column = :_type_disabled

    scope :duplicates, -> do
      all_duplicates = select(:project_id, :url)
                         .distinct
                         .group(:project_id, :url)
                         .having('count(*) > 1')
                         .pluck('array_agg(id) as ids')

      duplicate_ids = extract_duplicate_ids(all_duplicates)

      where(id: duplicate_ids)
    end

    def self.extract_duplicate_ids(duplicates)
      duplicates.flat_map { |ids| ids.first(ids.size - 1) }
    end
  end

  def up
    DastSiteToken.duplicates.delete_all
  end

  def down
  end
end