From d7318298964b62620b3d05051d5178fa2819887f Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Wed, 26 Jun 2024 09:43:12 +0200 Subject: [PATCH 1/2] db(after party): create representations for latest dossiers --- ...0240625151936_create_variants_for_pjs.rake | 34 +++++++++++++++++++ ...0240625151948_create_previews_for_pjs.rake | 31 +++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 lib/tasks/deployment/20240625151936_create_variants_for_pjs.rake create mode 100644 lib/tasks/deployment/20240625151948_create_previews_for_pjs.rake diff --git a/lib/tasks/deployment/20240625151936_create_variants_for_pjs.rake b/lib/tasks/deployment/20240625151936_create_variants_for_pjs.rake new file mode 100644 index 000000000..1f58b34eb --- /dev/null +++ b/lib/tasks/deployment/20240625151936_create_variants_for_pjs.rake @@ -0,0 +1,34 @@ +namespace :after_party do + desc 'Deployment task: create_variants_for_pjs' + task create_variants_for_pjs: :environment do + puts "Running deploy task 'create_variants_for_pjs'" + + # Put your task implementation HERE. + dossier_ids = Dossier + .state_en_construction_ou_instruction + .where(depose_at: 3.months.ago..) + .pluck(:id) + + champ_ids = Champ + .where(dossier_id: dossier_ids) + .where(type: ["Champs::PieceJustificativeChamp", 'Champs::TitreIdentiteChamp']) + .pluck(:id) + + attachments = ActiveStorage::Attachment + .where(record_id: champ_ids) + + attachments.in_batches.each_record do |attachment| + next unless attachment.variable? + attachment.variant(resize_to_limit: [400, 400]).processed if attachment.variant(resize_to_limit: [400, 400]).key.nil? + if attachment.blob.content_type.in?(RARE_IMAGE_TYPES) && attachment.variant(resize_to_limit: [2000, 2000]).key.nil? + attachment.variant(resize_to_limit: [2000, 2000]).processed + end + rescue MiniMagick::Error + end + + # 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 +end diff --git a/lib/tasks/deployment/20240625151948_create_previews_for_pjs.rake b/lib/tasks/deployment/20240625151948_create_previews_for_pjs.rake new file mode 100644 index 000000000..03a63f8c3 --- /dev/null +++ b/lib/tasks/deployment/20240625151948_create_previews_for_pjs.rake @@ -0,0 +1,31 @@ +namespace :after_party do + desc 'Deployment task: create_previews_for_pjs' + task create_previews_for_pjs: :environment do + puts "Running deploy task 'create_previews_for_pjs'" + + # Put your task implementation HERE. + dossier_ids = Dossier + .state_en_construction_ou_instruction + .where(depose_at: 3.months.ago..) + .pluck(:id) + + champ_ids = Champ + .where(dossier_id: dossier_ids) + .where(type: ["Champs::PieceJustificativeChamp", 'Champs::TitreIdentiteChamp']) + .pluck(:id) + + attachments = ActiveStorage::Attachment + .where(record_id: champ_ids) + + attachments.in_batches.each_record do |attachment| + next unless attachment.previewable? + attachment.preview(resize_to_limit: [400, 400]).processed unless attachment.preview(resize_to_limit: [400, 400]).image.attached? + rescue MiniMagick::Error + end + + # 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 +end From 5397c84918220db8f0ef8280911baeec0f1476f5 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Wed, 26 Jun 2024 09:44:08 +0200 Subject: [PATCH 2/2] clean: remove failing maintenance tasks --- ...previews_for_pj_of_latest_dossiers_task.rb | 26 --------- ...variants_for_pj_of_latest_dossiers_task.rb | 29 ---------- ...ews_for_pj_of_latest_dossiers_task_spec.rb | 41 -------------- ...nts_for_pj_of_latest_dossiers_task_spec.rb | 53 ------------------- 4 files changed, 149 deletions(-) delete mode 100644 app/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task.rb delete mode 100644 app/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task.rb delete mode 100644 spec/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task_spec.rb delete mode 100644 spec/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task_spec.rb diff --git a/app/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task.rb b/app/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task.rb deleted file mode 100644 index 09b0c9e29..000000000 --- a/app/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module Maintenance - class CreatePreviewsForPjOfLatestDossiersTask < MaintenanceTasks::Task - def collection - dossier_ids = Dossier - .state_en_construction_ou_instruction - .where(depose_at: 3.months.ago..) - .pluck(:id) - - champ_ids = Champ - .where(dossier_id: dossier_ids) - .where(type: ["Champs::PieceJustificativeChamp", 'Champs::TitreIdentiteChamp']) - .pluck(:id) - - ActiveStorage::Attachment - .where(record_id: champ_ids) - end - - def process(attachment) - return unless attachment.previewable? - attachment.preview(resize_to_limit: [400, 400]).processed unless attachment.preview(resize_to_limit: [400, 400]).image.attached? - rescue MiniMagick::Error - end - end -end diff --git a/app/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task.rb b/app/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task.rb deleted file mode 100644 index 22fe5db51..000000000 --- a/app/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -module Maintenance - class CreateVariantsForPjOfLatestDossiersTask < MaintenanceTasks::Task - def collection - dossier_ids = Dossier - .state_en_construction_ou_instruction - .where(depose_at: 3.months.ago..) - .pluck(:id) - - champ_ids = Champ - .where(dossier_id: dossier_ids) - .where(type: ["Champs::PieceJustificativeChamp", 'Champs::TitreIdentiteChamp']) - .pluck(:id) - - ActiveStorage::Attachment - .where(record_id: champ_ids) - end - - def process(attachment) - return unless attachment.variable? - attachment.variant(resize_to_limit: [400, 400]).processed if attachment.variant(resize_to_limit: [400, 400]).key.nil? - if attachment.blob.content_type.in?(RARE_IMAGE_TYPES) && attachment.variant(resize_to_limit: [2000, 2000]).key.nil? - attachment.variant(resize_to_limit: [2000, 2000]).processed - end - rescue MiniMagick::Error - end - end -end diff --git a/spec/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task_spec.rb b/spec/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task_spec.rb deleted file mode 100644 index 4dc92d795..000000000 --- a/spec/tasks/maintenance/create_previews_for_pj_of_latest_dossiers_task_spec.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -module Maintenance - RSpec.describe CreatePreviewsForPjOfLatestDossiersTask do - describe "#process" do - let(:procedure) { create(:procedure_with_dossiers) } - let(:type_de_champ_pj) { create(:type_de_champ_piece_justificative, stable_id: 3, libelle: 'Justificatif de domicile', procedure:) } - let(:champ_pj) { create(:champ_piece_justificative, type_de_champ: type_de_champ_pj) } - let(:blob_info) do - { - filename: file.original_filename, - byte_size: file.size, - checksum: Digest::SHA256.file(file.path), - content_type: file.content_type, - # we don't want to run virus scanner on this file - metadata: { virus_scan_result: ActiveStorage::VirusScanner::SAFE } - } - end - let(:blob) do - blob = ActiveStorage::Blob.create_before_direct_upload!(**blob_info) - blob.upload(file) - blob - end - - let(:attachment) { ActiveStorage::Attachment.create(name: "test", blob: blob, record: champ_pj) } - subject(:process) { described_class.process(attachment) } - - context "when pj is a pdf" do - let(:file) { fixture_file_upload('spec/fixtures/files/RIB.pdf', 'application/pdf') } - - it "creates a preview" do - expect(attachment.preview(resize_to_limit: [400, 400]).image.attached?).to be false - subject - expect(attachment.preview(resize_to_limit: [400, 400]).image.attached?).to be true - end - end - end - end -end diff --git a/spec/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task_spec.rb b/spec/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task_spec.rb deleted file mode 100644 index b41b816a8..000000000 --- a/spec/tasks/maintenance/create_variants_for_pj_of_latest_dossiers_task_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -module Maintenance - RSpec.describe CreateVariantsForPjOfLatestDossiersTask do - describe "#process" do - let(:procedure) { create(:procedure_with_dossiers) } - let(:type_de_champ_pj) { create(:type_de_champ_piece_justificative, stable_id: 3, libelle: 'Justificatif de domicile', procedure:) } - let(:champ_pj) { create(:champ_piece_justificative, type_de_champ: type_de_champ_pj) } - let(:blob_info) do - { - filename: file.original_filename, - byte_size: file.size, - checksum: Digest::SHA256.file(file.path), - content_type: file.content_type, - # we don't want to run virus scanner on this file - metadata: { virus_scan_result: ActiveStorage::VirusScanner::SAFE } - } - end - let(:blob) do - blob = ActiveStorage::Blob.create_before_direct_upload!(**blob_info) - blob.upload(file) - blob - end - - let(:attachment) { ActiveStorage::Attachment.create(name: "test", blob: blob, record: champ_pj) } - subject(:process) { described_class.process(attachment) } - - context "when pj is a classical format image" do - let(:file) { fixture_file_upload('spec/fixtures/files/logo_test_procedure.png', 'image/png') } - - it "creates a variant" do - expect(attachment.variant(resize_to_limit: [400, 400]).key).to be_nil - expect { subject }.to change { ActiveStorage::VariantRecord.count }.by(1) - expect(attachment.variant(resize_to_limit: [400, 400]).key).not_to be_nil - expect(attachment.variant(resize_to_limit: [2000, 2000]).key).to be_nil - end - end - - context "when pj is a rare format image" do - let(:file) { fixture_file_upload('spec/fixtures/files/pencil.tiff', 'image/tiff') } - - it "creates a variant" do - expect(attachment.variant(resize_to_limit: [400, 400]).key).to be_nil - expect { subject }.to change { ActiveStorage::VariantRecord.count }.by(2) - expect(attachment.variant(resize_to_limit: [400, 400]).key).not_to be_nil - expect(attachment.variant(resize_to_limit: [2000, 2000]).key).not_to be_nil - end - end - end - end -end