Browse Source

Refactor rake

pull/2685/head
Manny Dinssa 2 years ago
parent
commit
256a93d1fd
  1. 24
      lib/tasks/duplicate_rent_periods.rake

24
lib/tasks/duplicate_rent_periods.rake

@ -4,12 +4,12 @@ def process_duplicate_rent_periods(log_groups: true)
.group("organisation_id, rent_period") .group("organisation_id, rent_period")
.having("COUNT(*) > 1") .having("COUNT(*) > 1")
duplicate_records = OrganisationRentPeriod affected_records = OrganisationRentPeriod
.where(organisation_id: duplicate_groups.map(&:organisation_id), rent_period: duplicate_groups.map(&:rent_period)) .where(organisation_id: duplicate_groups.map(&:organisation_id), rent_period: duplicate_groups.map(&:rent_period))
if log_groups if log_groups
duplicate_groups.each do |group| duplicate_groups.each do |group|
group_records = duplicate_records.where(organisation_id: group.organisation_id, rent_period: group.rent_period) group_records = affected_records.where(organisation_id: group.organisation_id, rent_period: group.rent_period)
group_records.each do |record| group_records.each do |record|
Rails.logger.info "ID: #{record.id}, Organisation ID: #{record.organisation_id}, Rent Period: #{record.rent_period}" Rails.logger.info "ID: #{record.id}, Organisation ID: #{record.organisation_id}, Rent Period: #{record.rent_period}"
end end
@ -17,18 +17,18 @@ def process_duplicate_rent_periods(log_groups: true)
end end
end end
ids_to_keep = OrganisationRentPeriod to_keep_ids = OrganisationRentPeriod
.select("MIN(id) as id") .select("MIN(id) as id")
.group("organisation_id, rent_period") .group("organisation_id, rent_period")
.having("COUNT(*) > 1") .having("COUNT(*) > 1")
.map(&:id) .map(&:id)
redundant_ids = duplicate_records.pluck(:id) - ids_to_keep duplicate_ids = affected_records.pluck(:id) - to_keep_ids
{ {
duplicate_records:, affected_records:,
ids_to_keep:, to_keep_ids:,
redundant_ids:, duplicate_ids:,
} }
end end
@ -37,16 +37,16 @@ task find_redundant_rent_periods: :environment do
result = process_duplicate_rent_periods(log_groups: true) result = process_duplicate_rent_periods(log_groups: true)
Rails.logger.info "Total number of records: #{OrganisationRentPeriod.count}" Rails.logger.info "Total number of records: #{OrganisationRentPeriod.count}"
Rails.logger.info "Number of duplicate records: #{result[:duplicate_records].size}" Rails.logger.info "Number of affected records: #{result[:affected_records].size}"
Rails.logger.info "Number of records to delete: #{result[:redundant_ids].size}" Rails.logger.info "Number of records to delete: #{result[:duplicate_ids].size}"
Rails.logger.info "Number of records to keep: #{result[:ids_to_keep].size}" Rails.logger.info "Number of records to keep: #{result[:to_keep_ids].size}"
end end
desc "Delete redundant rent periods" desc "Delete redundant rent periods"
task delete_duplicate_rent_periods: :environment do task delete_duplicate_rent_periods: :environment do
result = process_duplicate_rent_periods(log_groups: false) result = process_duplicate_rent_periods(log_groups: false)
OrganisationRentPeriod.where(id: result[:redundant_ids]).delete_all OrganisationRentPeriod.where(id: result[:duplicate_ids]).delete_all
Rails.logger.info "Number of deleted duplicate records: #{result[:redundant_ids].size}" Rails.logger.info "Number of deleted duplicate records: #{result[:duplicate_ids].size}"
end end

Loading…
Cancel
Save