diff --git a/app/models/bulkrax/importer.rb b/app/models/bulkrax/importer.rb index 4ef79f2e..3e5d0196 100644 --- a/app/models/bulkrax/importer.rb +++ b/app/models/bulkrax/importer.rb @@ -18,6 +18,9 @@ class Importer < ApplicationRecord # rubocop:disable Metrics/ClassLength delegate :create_parent_child_relationships, :valid_import?, :write_errored_entries_file, :visibility, to: :parser + after_save :set_last_imported_at_from_importer_run + after_save :set_next_import_at_from_importer_run + attr_accessor :only_updates, :file_style, :file attr_writer :current_run @@ -247,5 +250,27 @@ def path_string rescue "#{self.id}_#{self.created_at.strftime('%Y%m%d%H%M%S')}" end + + private + + # Adding this here since we can update the importer without running the importer. + # When we simply save the importer (as in just updating the importer from the options), + # it does not trigger the after_save callback in the importer_run. + def set_last_imported_at_from_importer_run + return if @skip_set_last_imported_at # Prevent infinite loop + + @skip_set_last_imported_at = true + importer_runs.last&.set_last_imported_at + @skip_set_last_imported_at = false + end + + # @see #set_last_imported_at_from_importer_run + def set_next_import_at_from_importer_run + return if @skip_set_next_import_at # Prevent infinite loop + + @skip_set_next_import_at = true + importer_runs.last&.set_next_import_at + @skip_set_next_import_at = false + end end end diff --git a/app/models/bulkrax/importer_run.rb b/app/models/bulkrax/importer_run.rb index 132cdd1d..e9e139b6 100644 --- a/app/models/bulkrax/importer_run.rb +++ b/app/models/bulkrax/importer_run.rb @@ -6,6 +6,9 @@ class ImporterRun < ApplicationRecord has_many :statuses, as: :runnable, dependent: :destroy has_many :pending_relationships, dependent: :destroy + after_save :set_last_imported_at + after_save :set_next_import_at + def parents pending_relationships.pluck(:parent_id).uniq end @@ -15,5 +18,13 @@ def user # fallback to the configured user. importer.user || Bulkrax.fallback_user_for_importer_exporter_processing end + + def set_last_imported_at + importer.update(last_imported_at: importer.last_imported_at) + end + + def set_next_import_at + importer.update(next_import_at: importer.next_import_at) + end end end diff --git a/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb b/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb new file mode 100644 index 00000000..3cd782d0 --- /dev/null +++ b/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb @@ -0,0 +1,5 @@ +class AddLastImportedAtToBulkraxImporters < ActiveRecord::Migration[5.1] + def change + add_column :bulkrax_importers, :last_imported_at, :datetime + end +end diff --git a/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb b/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb new file mode 100644 index 00000000..26a76ce0 --- /dev/null +++ b/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb @@ -0,0 +1,5 @@ +class AddNextImportAtToBulkraxImporters < ActiveRecord::Migration[5.1] + def change + add_column :bulkrax_importers, :next_import_at, :datetime + end +end