From 8b73d8804cdf575d1da715e6f608ce50dde0767b Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 7 Apr 2021 09:43:55 +0200 Subject: [PATCH] fetch all exports at once by groupe_instructeurs_ids --- .../instructeurs/procedures_controller.rb | 5 +---- app/models/export.rb | 13 ++++++++----- spec/factories/export.rb | 2 +- spec/models/export_spec.rb | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index fe0de2785..b3dec8d2d 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -220,10 +220,7 @@ module Instructeurs end def assign_exports - groupe_instructeurs_for_procedure = current_instructeur.groupe_instructeurs.where(procedure: procedure) - @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) + @xlsx_export, @csv_export, @ods_export = Export.find_for_groupe_instructeurs(groupe_instructeur_ids) end def assign_to diff --git a/app/models/export.rb b/app/models/export.rb index be0d0816c..f1526af93 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -51,15 +51,18 @@ class Export < ApplicationRecord def self.find_or_create_export(format, 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 - def self.find_for_format_and_groupe_instructeurs(format, groupe_instructeurs) - find_by(format: format, key: generate_cache_key(groupe_instructeurs)) + def self.find_for_groupe_instructeurs(groupe_instructeurs_ids) + exports = where(key: generate_cache_key(groupe_instructeurs_ids)) + + ['xlsx', 'csv', 'ods'] + .map { |format| exports.find { |export| export.format == format } } end - def self.generate_cache_key(groupe_instructeurs) - groupe_instructeurs.map(&:id).sort.join('-') + def self.generate_cache_key(groupe_instructeurs_ids) + groupe_instructeurs_ids.sort.join('-') end private diff --git a/spec/factories/export.rb b/spec/factories/export.rb index 3582668f5..a647d7e01 100644 --- a/spec/factories/export.rb +++ b/spec/factories/export.rb @@ -4,7 +4,7 @@ FactoryBot.define do groupe_instructeurs { [association(:groupe_instructeur)] } 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 diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 5c1a23002..d6b31766a 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -48,9 +48,9 @@ RSpec.describe Export, type: :model do context 'when an export is made for one groupe instructeur' do 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_format_and_groupe_instructeurs(:csv, [gi_2, gi_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])[1]).to eq(nil) } + it { expect(Export.find_for_groupe_instructeurs([gi_2.id, gi_1.id])[1]).to eq(export) } + it { expect(Export.find_for_groupe_instructeurs([gi_1.id, gi_2.id, gi_3.id])[1]).to eq(nil) } end end end