From f2dcb61521d8bdb469a22a1e2024d61c30ba5112 Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Wed, 12 Aug 2020 16:10:15 +0200 Subject: [PATCH] transform job in task for set dossiers_last_updated_at --- .../tmp_set_dossiers_last_updated_at_job.rb | 30 --------------- .../tmp_set_dossiers_last_updated_at.rake | 37 +++++++++++++++++++ 2 files changed, 37 insertions(+), 30 deletions(-) delete mode 100644 app/jobs/tmp_set_dossiers_last_updated_at_job.rb create mode 100644 lib/tasks/tmp_set_dossiers_last_updated_at.rake diff --git a/app/jobs/tmp_set_dossiers_last_updated_at_job.rb b/app/jobs/tmp_set_dossiers_last_updated_at_job.rb deleted file mode 100644 index 80c15e043..000000000 --- a/app/jobs/tmp_set_dossiers_last_updated_at_job.rb +++ /dev/null @@ -1,30 +0,0 @@ -class TmpSetDossiersLastUpdatedAtJob < ApplicationJob - def perform(except) - dossiers = Dossier.where - .not(id: except) - .where(last_champ_updated_at: nil) - .includes(:champs, :avis, :commentaires) - .limit(100) - - dossiers.find_each do |dossier| - last_commentaire_updated_at = dossier.commentaires - .where.not(email: OLD_CONTACT_EMAIL) - .where.not(email: CONTACT_EMAIL) - .maximum(:updated_at) - last_avis_updated_at = dossier.avis.maximum(:updated_at) - last_champ_updated_at = dossier.champs.maximum(:updated_at) - last_champ_private_updated_at = dossier.champs_private.maximum(:updated_at) - dossier.update_columns( - last_commentaire_updated_at: last_commentaire_updated_at, - last_avis_updated_at: last_avis_updated_at, - last_champ_updated_at: last_champ_updated_at, - last_champ_private_updated_at: last_champ_private_updated_at - ) - except << dossier.id - end - - if dossiers.where.not(id: except).exists? - TmpSetDossiersLastUpdatedAtJob.perform_later(except) - end - end -end diff --git a/lib/tasks/tmp_set_dossiers_last_updated_at.rake b/lib/tasks/tmp_set_dossiers_last_updated_at.rake new file mode 100644 index 000000000..d506cb2f8 --- /dev/null +++ b/lib/tasks/tmp_set_dossiers_last_updated_at.rake @@ -0,0 +1,37 @@ +require Rails.root.join("lib", "tasks", "task_helper") + +namespace :tmp_set_dossiers_last_updated_at do + desc 'set for all dossiers last_updated_at' + task run: :environment do + start_id = ENV.fetch('DOSSIER_START_AT', 0) + + all_dossiers = Dossier.with_discarded + .where('dossiers.id > ?', start_id) + .includes(:champs, :avis, :commentaires) + .order(:id) + + progress = ProgressReport.new(all_dossiers.count) + + all_dossiers.in_batches do |dossiers| + dossiers.each do |dossier| + last_commentaire_updated_at = dossier.commentaires + .where.not(email: OLD_CONTACT_EMAIL) + .where.not(email: CONTACT_EMAIL) + .maximum(:updated_at) + last_avis_updated_at = dossier.avis.maximum(:updated_at) + last_champ_updated_at = dossier.champs.maximum(:updated_at) + last_champ_private_updated_at = dossier.champs_private.maximum(:updated_at) + dossier.update_columns( + last_commentaire_updated_at: last_commentaire_updated_at, + last_avis_updated_at: last_avis_updated_at, + last_champ_updated_at: last_champ_updated_at, + last_champ_private_updated_at: last_champ_private_updated_at + ) + progress.inc + end + rake_puts "dossiers lastid: #{dossiers.last.id}" + end + + progress.finish + end +end