refactor(export): reduce repetition in export code hopefully making it more readable

This commit is contained in:
Paul Chavard 2022-11-15 18:53:23 +01:00
parent c1ae9d03be
commit 6f6b3896de
4 changed files with 57 additions and 119 deletions

View file

@ -4,19 +4,14 @@ module Administrateurs
before_action :ensure_not_super_admin!
def download
export = Export.find_or_create_export(export_format, all_groupe_instructeurs, **export_options)
if export.available? && export.old? && force_export?
export.destroy
export = Export.find_or_create_export(export_format, all_groupe_instructeurs, **export_options)
end
export = Export.find_or_create_export(export_format, all_groupe_instructeurs, force: force_export?, **export_options)
@dossiers_count = export.count
assign_exports
if export.available?
respond_to do |format|
format.turbo_stream do
@dossiers_count = export.count
assign_exports
flash.notice = "Lexport au format \"#{export_format}\" est prêt. Vous pouvez le <a href=\"#{export.file.service_url}\">télécharger</a>"
flash.notice = export.flash_message
end
format.html do
@ -25,18 +20,13 @@ module Administrateurs
end
else
respond_to do |format|
notice_message = "Nous générons cet export. Veuillez revenir dans quelques minutes pour le télécharger."
format.turbo_stream do
@dossiers_count = export.count
assign_exports
if !params[:no_progress_notification]
flash.notice = notice_message
flash.notice = export.flash_message
end
end
format.html do
redirect_to admin_procedure_archives_url(@procedure), notice: notice_message
redirect_to admin_procedure_archives_url(@procedure), notice: export.flash_message
end
end
end

View file

@ -158,21 +158,17 @@ module Instructeurs
.visible_by_administration
.exists?(groupe_instructeur_id: groupe_instructeur_ids) && !instructeur_as_manager?
export = Export.find_or_create_export(export_format, groupe_instructeurs, **export_options)
export = Export.find_or_create_export(export_format, groupe_instructeurs, force: force_export?, **export_options)
if export.available? && export.old? && force_export?
export.destroy
export = Export.find_or_create_export(export_format, groupe_instructeurs, **export_options)
end
@procedure = procedure
@statut = export_options[:statut]
@dossiers_count = export.count
assign_exports
if export.available?
respond_to do |format|
format.turbo_stream do
@procedure = procedure
@statut = export_options[:statut]
@dossiers_count = export.count
assign_exports
flash.notice = "Lexport au format \"#{export_format}\" est prêt. Vous pouvez le <a href=\"#{export.file.service_url}\">télécharger</a>"
flash.notice = export.flash_message
end
format.html do
@ -181,20 +177,13 @@ module Instructeurs
end
else
respond_to do |format|
notice_message = "Nous générons cet export. Veuillez revenir dans quelques minutes pour le télécharger."
format.turbo_stream do
@procedure = procedure
@statut = export_options[:statut]
@dossiers_count = export.count
assign_exports
if !params[:no_progress_notification]
flash.notice = notice_message
flash.notice = export.flash_message
end
end
format.html do
redirect_to instructeur_procedure_url(procedure), notice: notice_message
redirect_to instructeur_procedure_url(procedure), notice: export.flash_message
end
end
end

View file

@ -83,13 +83,23 @@ class Export < ApplicationRecord
procedure_presentation_id.present?
end
def self.find_or_create_export(format, groupe_instructeurs, time_span_type: time_span_types.fetch(:everything), statut: statuts.fetch(:tous), procedure_presentation: nil)
create_with(groupe_instructeurs: groupe_instructeurs, procedure_presentation: procedure_presentation, procedure_presentation_snapshot: procedure_presentation&.snapshot)
.includes(:procedure_presentation)
.create_or_find_by(format: format,
time_span_type: time_span_type,
statut: statut,
key: generate_cache_key(groupe_instructeurs.map(&:id), procedure_presentation))
def flash_message
if available?
"Lexport au format \"#{format}\" est prêt. Vous pouvez le <a href=\"#{file.service_url}\">télécharger</a>"
else
"Nous générons cet export. Veuillez revenir dans quelques minutes pour le télécharger."
end
end
def self.find_or_create_export(format, groupe_instructeurs, time_span_type: time_span_types.fetch(:everything), statut: statuts.fetch(:tous), procedure_presentation: nil, force: false)
export = create_or_find_export(format, groupe_instructeurs, time_span_type: time_span_type, statut: statut, procedure_presentation: procedure_presentation)
if export.available? && export.old? && force
export.destroy
create_or_find_export(format, groupe_instructeurs, time_span_type: time_span_type, statut: statut, procedure_presentation: procedure_presentation)
else
export
end
end
def self.find_for_groupe_instructeurs(groupe_instructeurs_ids, procedure_presentation)
@ -121,6 +131,15 @@ class Export < ApplicationRecord
}
end
def self.create_or_find_export(format, groupe_instructeurs, time_span_type:, statut:, procedure_presentation:)
create_with(groupe_instructeurs: groupe_instructeurs, procedure_presentation: procedure_presentation, procedure_presentation_snapshot: procedure_presentation&.snapshot)
.includes(:procedure_presentation)
.create_or_find_by(format: format,
time_span_type: time_span_type,
statut: statut,
key: generate_cache_key(groupe_instructeurs.map(&:id), procedure_presentation))
end
def self.generate_cache_key(groupe_instructeurs_ids, procedure_presentation = nil)
if procedure_presentation.present?
[