Merge pull request #10556 from demarches-simplifiees/create_representations_after_party
Technique : crée des variants et prévisualisations des pjs pour les dossiers récents
This commit is contained in:
commit
6ea42b3d56
6 changed files with 65 additions and 149 deletions
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
|
@ -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
|
|
Loading…
Reference in a new issue