feat(archive): extract archive status management within job to simplify the main service as well as to isolate this part for a merge with exports csv/xslx [maybe?]
Update app/dashboards/archive_dashboard.rb Co-authored-by: LeSim <mail@simon.lehericey.net>
This commit is contained in:
parent
fc50ff8e49
commit
dbcf21a555
8 changed files with 118 additions and 16 deletions
4
app/controllers/manager/archives_controller.rb
Normal file
4
app/controllers/manager/archives_controller.rb
Normal file
|
@ -0,0 +1,4 @@
|
|||
module Manager
|
||||
class ArchivesController < Manager::ApplicationController
|
||||
end
|
||||
end
|
46
app/dashboards/archive_dashboard.rb
Normal file
46
app/dashboards/archive_dashboard.rb
Normal file
|
@ -0,0 +1,46 @@
|
|||
require "administrate/base_dashboard"
|
||||
|
||||
class ArchiveDashboard < Administrate::BaseDashboard
|
||||
# ATTRIBUTE_TYPES
|
||||
# a hash that describes the type of each of the model's fields.
|
||||
#
|
||||
# Each different type represents an Administrate::Field object,
|
||||
# which determines how the attribute is displayed
|
||||
# on pages throughout the dashboard.
|
||||
ATTRIBUTE_TYPES = {
|
||||
id: Field::Number,
|
||||
created_at: Field::DateTime,
|
||||
updated_at: Field::DateTime,
|
||||
status: Field::String,
|
||||
file: Field::HasOne
|
||||
}.freeze
|
||||
|
||||
# COLLECTION_ATTRIBUTES
|
||||
# an array of attributes that will be displayed on the model's index page.
|
||||
#
|
||||
# By default, it's limited to four items to reduce clutter on index pages.
|
||||
# Feel free to add, remove, or rearrange items.
|
||||
COLLECTION_ATTRIBUTES = [
|
||||
:id,
|
||||
:created_at,
|
||||
:updated_at,
|
||||
:status
|
||||
].freeze
|
||||
|
||||
# SHOW_PAGE_ATTRIBUTES
|
||||
# an array of attributes that will be displayed on the model's show page.
|
||||
SHOW_PAGE_ATTRIBUTES = [
|
||||
:id,
|
||||
:created_at,
|
||||
:updated_at,
|
||||
:status,
|
||||
:file
|
||||
].freeze
|
||||
|
||||
# Overwrite this method to customize how users are displayed
|
||||
# across all pages of the admin dashboard.
|
||||
#
|
||||
def display_resource(archive)
|
||||
"Archive : #{archive&.file.&byte_size}"
|
||||
end
|
||||
end
|
|
@ -2,8 +2,14 @@ class ArchiveCreationJob < ApplicationJob
|
|||
queue_as :archives
|
||||
|
||||
def perform(procedure, archive, instructeur)
|
||||
archive.restart! if archive.failed? # restart for AASM
|
||||
ProcedureArchiveService
|
||||
.new(procedure)
|
||||
.collect_files_archive(archive, instructeur)
|
||||
.make_and_upload_archive(archive, instructeur)
|
||||
archive.make_available!
|
||||
InstructeurMailer.send_archive(instructeur, procedure, archive).deliver_later
|
||||
rescue => e
|
||||
archive.fail! # fail for observability
|
||||
raise e # re-raise for retryable behaviour
|
||||
end
|
||||
end
|
||||
|
|
|
@ -35,16 +35,24 @@ class Archive < ApplicationRecord
|
|||
|
||||
enum status: {
|
||||
pending: 'pending',
|
||||
generated: 'generated'
|
||||
generated: 'generated',
|
||||
failed: 'failed'
|
||||
}
|
||||
|
||||
aasm whiny_persistence: true, column: :status, enum: true do
|
||||
state :pending, initial: true
|
||||
state :generated
|
||||
state :failed
|
||||
|
||||
event :make_available do
|
||||
transitions from: :pending, to: :generated
|
||||
end
|
||||
event :restart do
|
||||
transitions from: :failed, to: :pending
|
||||
end
|
||||
event :fail do
|
||||
transitions from: :pending, to: :failed
|
||||
end
|
||||
end
|
||||
|
||||
def available?
|
||||
|
|
|
@ -15,7 +15,7 @@ class ProcedureArchiveService
|
|||
Archive.find_or_create_archive(type, month, groupe_instructeurs)
|
||||
end
|
||||
|
||||
def collect_files_archive(archive, instructeur)
|
||||
def make_and_upload_archive(archive, instructeur)
|
||||
dossiers = Dossier.visible_by_administration
|
||||
.where(groupe_instructeur: archive.groupe_instructeurs)
|
||||
|
||||
|
@ -30,8 +30,6 @@ class ProcedureArchiveService
|
|||
ArchiveUploader.new(procedure: @procedure, archive: archive, filepath: zip_filepath)
|
||||
.upload
|
||||
end
|
||||
archive.make_available!
|
||||
InstructeurMailer.send_archive(instructeur, @procedure, archive).deliver_later
|
||||
end
|
||||
|
||||
def self.procedure_files_size(procedure)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue