Skip to content

Commit 0b9650d

Browse files
authored
Merge pull request #4441 from betagouv/fix/impossible-to-dl-stale
#4434 - Rend possible le fait de télécharger 2x un export
2 parents 669773f + d9e9935 commit 0b9650d

3 files changed

Lines changed: 36 additions & 5 deletions

File tree

app/controllers/instructeurs/procedures_controller.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,16 +207,19 @@ def download_dossiers
207207

208208
def download_export
209209
export_format = params[:export_format]
210-
210+
notice_message = "Nous générons cet export. Lorsque celui-ci sera disponible, vous recevrez une notification par email accompagnée d'un lien de téléchargement."
211211
if procedure.should_generate_export?(export_format)
212212
procedure.queue_export(current_instructeur, export_format)
213213

214214
respond_to do |format|
215215
format.js do
216-
flash.notice = "Nous générons cet export. Lorsque celui-ci sera disponible, vous recevrez une notification par email accompagnée d'un lien de téléchargement."
216+
flash.notice = notice_message
217217
@procedure = procedure
218218
end
219219
end
220+
elsif procedure.export_queued?(export_format)
221+
flash.notice = notice_message
222+
redirect_to procedure
220223
else
221224
redirect_to url_for(procedure.export_file(export_format))
222225
end

app/jobs/cleanup_stale_exports_job.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,25 @@ class CleanupStaleExportsJob < ApplicationJob
22
queue_as :cron
33

44
def perform(*args)
5-
ActiveStorage::Attachment.where(
5+
attachments = ActiveStorage::Attachment.where(
66
"name in ('csv_export_file', 'ods_export_file', 'xlsx_export_file') and created_at < ?",
77
Procedure::MAX_DUREE_CONSERVATION_EXPORT.ago
8-
).find_each(&:purge_later)
8+
)
9+
attachments.each do |attachment|
10+
procedure = Procedure.find(attachment.record_id)
11+
# export can't be queued if it's already attached
12+
#  so we clean the flag up just in case it was not removed during
13+
# the asynchronous generation
14+
case attachment.name
15+
when 'csv_export_file'
16+
procedure.update(csv_export_queued: false)
17+
when 'ods_export_file'
18+
procedure.update(ods_export_queued: false)
19+
when 'xlsx_export_file'
20+
procedure.update(xlsx_export_queued: false)
21+
end
22+
# and we remove the stale attachment
23+
attachment.purge_later
24+
end
925
end
1026
end

app/models/procedure.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,18 @@ def ods_export_stale?
145145
!ods_export_file.attached? || ods_export_file.created_at < MAX_DUREE_CONSERVATION_EXPORT.ago
146146
end
147147

148+
def export_queued?(format)
149+
case format.to_sym
150+
when :csv
151+
return csv_export_queued?
152+
when :xlsx
153+
return xlsx_export_queued?
154+
when :ods
155+
return ods_export_queued?
156+
end
157+
false
158+
end
159+
148160
def should_generate_export?(format)
149161
case format.to_sym
150162
when :csv
@@ -169,7 +181,6 @@ def export_file(export_format)
169181
end
170182

171183
def queue_export(instructeur, export_format)
172-
ExportProcedureJob.perform_now(self, instructeur, export_format)
173184
case export_format.to_sym
174185
when :csv
175186
update(csv_export_queued: true)
@@ -178,6 +189,7 @@ def queue_export(instructeur, export_format)
178189
when :ods
179190
update(ods_export_queued: true)
180191
end
192+
ExportProcedureJob.perform_later(self, instructeur, export_format)
181193
end
182194

183195
def prepare_export_download(format)

0 commit comments

Comments
 (0)