demarches-normaliennes/lib/tasks/deployment/20230208084036_normalize_departements.rake
2023-02-13 16:32:34 +01:00

32 lines
1.4 KiB
Ruby

namespace :after_party do
desc 'Deployment task: normalize_departements'
task normalize_departements: :environment do
puts "Running deploy task 'normalize_departements'"
scope_external_id_nil = Champs::DepartementChamp.where(external_id: nil)
scope_external_id_empty = Champs::DepartementChamp.where(external_id: '')
scope_external_id_present = Champs::DepartementChamp.where.not(external_id: [nil, ''])
progress = ProgressReport.new(scope_external_id_nil.count + scope_external_id_empty.count + scope_external_id_present.count)
normalize_asynchronously(scope_external_id_nil, progress, Migrations::NormalizeDepartementsWithNilExternalIdJob)
normalize_asynchronously(scope_external_id_empty, progress, Migrations::NormalizeDepartementsWithEmptyExternalIdJob)
normalize_asynchronously(scope_external_id_present, progress, Migrations::NormalizeDepartementsWithPresentExternalIdJob)
progress.finish
# Update task as completed. If you remove the line below, the task will
# run with every deploy (or every time you call after_party:run).
AfterParty::TaskRecord
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
end
private
def normalize_asynchronously(scope, progress, job)
scope.pluck(:id).in_groups_of(10_000, false) do |champ_ids|
job.perform_later(champ_ids)
progress.inc(champ_ids.count)
end
end
end