diff --git a/app/services/hyrax/admin_set_create_service.rb b/app/services/hyrax/admin_set_create_service.rb index 0809209afa..722bc6ea2b 100644 --- a/app/services/hyrax/admin_set_create_service.rb +++ b/app/services/hyrax/admin_set_create_service.rb @@ -84,7 +84,7 @@ def save_default? # Create an instance of `Hyrax::AdministrativeSet` with the suggested_id if supported. # @return [Hyrax::AdministrativeSet] the new admin set def create_admin_set(suggested_id:, title:) - if suggested_id.blank? || Hyrax.config.disable_wings || !Hyrax.metadata_adapter.is_a?(Wings::Valkyrie::MetadataAdapter) + if suggested_id.blank? || Hyrax.config.disable_wings # allow persister to assign id Hyrax::AdministrativeSet.new(title: Array.wrap(title)) else diff --git a/app/services/hyrax/listeners/object_lifecycle_listener.rb b/app/services/hyrax/listeners/object_lifecycle_listener.rb index 76358c2b1f..e0bb525868 100644 --- a/app/services/hyrax/listeners/object_lifecycle_listener.rb +++ b/app/services/hyrax/listeners/object_lifecycle_listener.rb @@ -10,7 +10,11 @@ class ObjectLifecycleListener # @param [Dry::Events::Event] event # @return [void] def on_object_deleted(event) - ContentDeleteEventJob.perform_later(event[:id].to_s, event[:user]) + # Accessing a non-existent key on a Dry::Events::Event will raise a KeyError; hence + # we cast the event to a hash + event = event.to_h + object_id = event[:object]&.id || event[:id] + ContentDeleteEventJob.perform_later(object_id.to_s, event[:user]) end ## diff --git a/app/services/hyrax/listeners/trophy_cleanup_listener.rb b/app/services/hyrax/listeners/trophy_cleanup_listener.rb index a6175126de..2d0160e5c8 100644 --- a/app/services/hyrax/listeners/trophy_cleanup_listener.rb +++ b/app/services/hyrax/listeners/trophy_cleanup_listener.rb @@ -9,7 +9,8 @@ class TrophyCleanupListener # @param [Dry::Events::Event] event # @return [void] def on_object_deleted(event) - Trophy.where(work_id: event[:id]).destroy_all + object_id = event[:object]&.id || event[:id] + Trophy.where(work_id: object_id).destroy_all rescue StandardError => err Hyrax.logger.warn "Failed to delete trophies for #{event[:id]}. " \ 'These trophies might be orphaned.' \ diff --git a/app/services/hyrax/listeners/workflow_listener.rb b/app/services/hyrax/listeners/workflow_listener.rb index 7138224cc1..53106911cd 100644 --- a/app/services/hyrax/listeners/workflow_listener.rb +++ b/app/services/hyrax/listeners/workflow_listener.rb @@ -22,6 +22,7 @@ def initialize(factory: Hyrax::Workflow::WorkflowFactory) # @param [Dry::Events::Event] event # @return [void] def on_object_deposited(event) + event = event.to_h return Hyrax.logger.warn("Skipping workflow initialization for #{event[:object]}; no user is given\n\t#{event}") if event[:user].blank? @@ -30,6 +31,18 @@ def on_object_deposited(event) # don't error on known sipity error types; log instead Hyrax.logger.error(err) end + + ## + # Called when 'object.deleted' event is published + # @param [Dry::Events::Event] event + # @return [void] + def on_object_deleted(event) + event = event.to_h + return unless event[:object] + gid = Hyrax::ValkyrieGlobalIdProxy.new(resource: event[:object]).to_global_id + return if gid.blank? + Sipity::Entity.where(proxy_for_global_id: gid.to_s).destroy_all + end end end end