houdini/lib/update/update_custom_field_joins.rb
2020-06-15 10:26:57 -05:00

25 lines
1 KiB
Ruby

# frozen_string_literal: true
# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
require 'qx'
module UpdateCustomFieldJoins
# Delete custom field joins that have the same custom field master
# Favor the most recent custom field join
def self.delete_dupes(supporter_ids)
# Bulk remove duplicate custom field joins, favoring the most recent one
ids = Qx.select('ARRAY_AGG(custom_field_joins.id ORDER BY custom_field_joins.created_at DESC) AS ids')
.from(:custom_field_joins)
.where('custom_field_joins.supporter_id IN ($ids)', ids: supporter_ids)
.join('custom_field_masters cfms', 'cfms.id = custom_field_joins.custom_field_master_id')
.group_by('cfms.name')
.having('COUNT(custom_field_joins) > 1')
.execute.map { |h| h['ids'][1..-1] }.flatten
return unless ids.any?
Qx.delete_from(:custom_field_joins)
.where('id IN ($ids)', ids: ids)
.execute
end
end