fetch all exports at once by groupe_instructeurs_ids
This commit is contained in:
parent
951d4c0025
commit
8b73d8804c
4 changed files with 13 additions and 13 deletions
|
@ -220,10 +220,7 @@ module Instructeurs
|
||||||
end
|
end
|
||||||
|
|
||||||
def assign_exports
|
def assign_exports
|
||||||
groupe_instructeurs_for_procedure = current_instructeur.groupe_instructeurs.where(procedure: procedure)
|
@xlsx_export, @csv_export, @ods_export = Export.find_for_groupe_instructeurs(groupe_instructeur_ids)
|
||||||
@xlsx_export = Export.find_for_format_and_groupe_instructeurs(:xlsx, groupe_instructeurs_for_procedure)
|
|
||||||
@csv_export = Export.find_for_format_and_groupe_instructeurs(:csv, groupe_instructeurs_for_procedure)
|
|
||||||
@ods_export = Export.find_for_format_and_groupe_instructeurs(:ods, groupe_instructeurs_for_procedure)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def assign_to
|
def assign_to
|
||||||
|
|
|
@ -51,15 +51,18 @@ class Export < ApplicationRecord
|
||||||
|
|
||||||
def self.find_or_create_export(format, groupe_instructeurs)
|
def self.find_or_create_export(format, groupe_instructeurs)
|
||||||
create_with(groupe_instructeurs: groupe_instructeurs)
|
create_with(groupe_instructeurs: groupe_instructeurs)
|
||||||
.create_or_find_by(format: format, key: generate_cache_key(groupe_instructeurs))
|
.create_or_find_by(format: format, key: generate_cache_key(groupe_instructeurs.map(&:id)))
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.find_for_format_and_groupe_instructeurs(format, groupe_instructeurs)
|
def self.find_for_groupe_instructeurs(groupe_instructeurs_ids)
|
||||||
find_by(format: format, key: generate_cache_key(groupe_instructeurs))
|
exports = where(key: generate_cache_key(groupe_instructeurs_ids))
|
||||||
|
|
||||||
|
['xlsx', 'csv', 'ods']
|
||||||
|
.map { |format| exports.find { |export| export.format == format } }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.generate_cache_key(groupe_instructeurs)
|
def self.generate_cache_key(groupe_instructeurs_ids)
|
||||||
groupe_instructeurs.map(&:id).sort.join('-')
|
groupe_instructeurs_ids.sort.join('-')
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -4,7 +4,7 @@ FactoryBot.define do
|
||||||
groupe_instructeurs { [association(:groupe_instructeur)] }
|
groupe_instructeurs { [association(:groupe_instructeur)] }
|
||||||
|
|
||||||
after(:build) do |export, _evaluator|
|
after(:build) do |export, _evaluator|
|
||||||
export.key = Export.generate_cache_key(export.groupe_instructeurs)
|
export.key = Export.generate_cache_key(export.groupe_instructeurs.map(&:id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,9 +48,9 @@ RSpec.describe Export, type: :model do
|
||||||
context 'when an export is made for one groupe instructeur' do
|
context 'when an export is made for one groupe instructeur' do
|
||||||
let!(:export) { create(:export, groupe_instructeurs: [gi_1, gi_2]) }
|
let!(:export) { create(:export, groupe_instructeurs: [gi_1, gi_2]) }
|
||||||
|
|
||||||
it { expect(Export.find_for_format_and_groupe_instructeurs(:csv, [gi_1])).to eq(nil) }
|
it { expect(Export.find_for_groupe_instructeurs([gi_1.id])[1]).to eq(nil) }
|
||||||
it { expect(Export.find_for_format_and_groupe_instructeurs(:csv, [gi_2, gi_1])).to eq(export) }
|
it { expect(Export.find_for_groupe_instructeurs([gi_2.id, gi_1.id])[1]).to eq(export) }
|
||||||
it { expect(Export.find_for_format_and_groupe_instructeurs(:csv, [gi_1, gi_2, gi_3])).to eq(nil) }
|
it { expect(Export.find_for_groupe_instructeurs([gi_1.id, gi_2.id, gi_3.id])[1]).to eq(nil) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue