From 38db6d3dd218a8d72b1a40019321a0aa9c847261 Mon Sep 17 00:00:00 2001
From: Anusha Ranganathan <anusha@cottagelabs.com>
Date: Wed, 22 May 2024 11:44:03 +0100
Subject: [PATCH] Find failed entries for count and rake task

---
 hyrax/app/helpers/bulkrax_helper.rb                  | 12 ++++++++----
 .../lib/tasks/rerun_failed_entries_in_importer.rake  | 12 ++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)
 create mode 100644 hyrax/lib/tasks/rerun_failed_entries_in_importer.rake

diff --git a/hyrax/app/helpers/bulkrax_helper.rb b/hyrax/app/helpers/bulkrax_helper.rb
index 317620b3..d5a0d9ea 100644
--- a/hyrax/app/helpers/bulkrax_helper.rb
+++ b/hyrax/app/helpers/bulkrax_helper.rb
@@ -2,13 +2,17 @@ module BulkraxHelper
   def rerun_failed_entries_in_last_run
     current_run = @importer.last_run
 
-    if current_run&.failed_records&.positive?
+    failed_entries = []
+    @importer.entries.each do |entry|
+      next if entry.status == 'Complete'
+      failed_entries << entry
+    end
+
+    if failed_entries.any?
       ::Bulkrax::ScheduleRelationshipsJob.set(wait: 5.minutes).perform_later(importer_id: @importer.id)
       @importer.status_info('Pending')
 
-      @importer.entries.each do |entry|
-        next if entry.status == 'Complete'
-
+      failed_entries.each do |entry|
         type = if entry.raw_metadata['model'] == 'CrcDataset'
                  'Work'
                else
diff --git a/hyrax/lib/tasks/rerun_failed_entries_in_importer.rake b/hyrax/lib/tasks/rerun_failed_entries_in_importer.rake
new file mode 100644
index 00000000..db6fb3c1
--- /dev/null
+++ b/hyrax/lib/tasks/rerun_failed_entries_in_importer.rake
@@ -0,0 +1,12 @@
+namespace :rdms do
+  desc 'Rerun failed entries in last run of importer. usage: rdms:rerun_failed_entries_in_importer[importer_id]'
+  task :"rerun_failed_entries_in_importer", [:importer_id] => :environment do |task, args|
+    importer_id = args.importer_id
+    abort("ERROR: missing importer_id: #{importer_id}") unless importer_id.present?
+    importer_id = importer_id.to_s.strip
+    abort("ERROR: importer_id is not an integer: #{importer_id}") unless importer_id.to_i.to_s == importer_id
+    @importer = ::Bulkrax::Importer.find(importer_id)
+    include BulkraxHelper
+    rerun_failed_entries_in_last_run
+  end
+end
\ No newline at end of file
-- 
GitLab