Skip to content

Commit

Permalink
Do proxy deposit updates synchronously
Browse files Browse the repository at this point in the history
refs #5457
  • Loading branch information
hackartisan committed Mar 15, 2022
1 parent 3ea6965 commit 56e1425
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 6 deletions.
6 changes: 4 additions & 2 deletions app/actors/hyrax/actors/transfer_request_actor.rb
Expand Up @@ -15,8 +15,10 @@ def create(env)
def create_proxy_deposit_request(env)
proxy = env.curation_concern.on_behalf_of
return true if proxy.blank?
ContentDepositorChangeEventJob.perform_later(env.curation_concern,
::User.find_by_user_key(proxy))
work = env.curation_concern
user = ::User.find_by_user_key(proxy)
Hyrax::ChangeContentDepositorService.call(work, user)
ContentDepositorChangeEventJob.perform_later(work, user)
true
end
end
Expand Down
9 changes: 6 additions & 3 deletions app/controllers/concerns/hyrax/works_controller_behavior.rb
Expand Up @@ -181,9 +181,12 @@ def create_valkyrie_work

result =
transactions['change_set.create_work']
.with_step_args('work_resource.add_to_parent' => { parent_id: params[:parent_id], user: current_user },
'work_resource.add_file_sets' => { uploaded_files: uploaded_files, file_set_params: params[hash_key_for_curation_concern][:file_set] },
'change_set.set_user_as_depositor' => { user: current_user })
.with_step_args(
'work_resource.add_to_parent' => { parent_id: params[:parent_id], user: current_user },
'work_resource.add_file_sets' => { uploaded_files: uploaded_files, file_set_params: params[hash_key_for_curation_concern][:file_set] },
'change_set.set_user_as_depositor' => { user: current_user },
'work_resource.change_content_depositor' => { user: form.on_behalf_of }
)
.call(form)
@curation_concern = result.value_or { return after_create_error(transaction_err_msg(result)) }
after_create_response
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/content_depositor_change_event_job.rb
Expand Up @@ -31,7 +31,7 @@ def log_work_event(work)
alias log_file_set_event log_work_event

def work
@work ||= Hyrax::ChangeContentDepositorService.call(repo_object, depositor, reset)
@work ||= repo_object
end

# overriding default to log the event to the depositor instead of their profile
Expand Down
1 change: 1 addition & 0 deletions app/models/proxy_deposit_request.rb
Expand Up @@ -129,6 +129,7 @@ def send_request_transfer_message_as_part_of_update

# @param [TrueClass,FalseClass] reset (false) if true, reset the access controls. This revokes edit access from the depositor
def transfer!(reset = false)
Hyrax::ChangeContentDepositorService.call(work, receiving_user, reset)
ContentDepositorChangeEventJob.perform_later(work, receiving_user, reset)
fulfill!(status: ACCEPTED)
end
Expand Down
2 changes: 2 additions & 0 deletions app/services/hyrax/change_content_depositor_service.rb
Expand Up @@ -12,7 +12,9 @@ class ChangeContentDepositorService
# permissions for the given work and contained file
# sets; regardless of true/false make the given user
# the depositor of the given work
# @return work, updated if necessary
def self.call(work, user, reset)
return work if work.try(:on_behalf_of).blank? || (work.on_behalf_of == work.depositor)
case work
when ActiveFedora::Base
call_af(work, user, reset)
Expand Down
5 changes: 5 additions & 0 deletions lib/hyrax/transactions/container.rb
Expand Up @@ -33,6 +33,7 @@ class Container # rubocop:disable Metrics/ClassLength
require 'hyrax/transactions/steps/add_to_collections'
require 'hyrax/transactions/steps/add_to_parent'
require 'hyrax/transactions/steps/apply_collection_type_permissions'
require 'hyrax/transactions/steps/change_content_depositor'
require 'hyrax/transactions/steps/check_for_empty_admin_set'
require 'hyrax/transactions/steps/delete_access_control'
require 'hyrax/transactions/steps/delete_resource'
Expand Down Expand Up @@ -204,6 +205,10 @@ class Container # rubocop:disable Metrics/ClassLength
Steps::AddToParent.new
end

ops.register 'change_content_depositor' do
Steps::ChangeContentDepositor.new
end

ops.register 'delete' do
Steps::DeleteResource.new
end
Expand Down
46 changes: 46 additions & 0 deletions lib/hyrax/transactions/steps/change_content_depositor.rb
@@ -0,0 +1,46 @@
# frozen_string_literal: true
require 'dry/monads'

module Hyrax
module Transactions
module Steps
##
# Add a given `::User` as the `#depositor`
# Move the previous value of that property to `#proxy_depositor`
#
#
# If no user is given, simply passes as a `Success`.
#
# @since 3.4.0
class ChangeContentDepositor
include Dry::Monads[:result]

##
# @param [Hyrax::Work] obj
# @param user [User] the user that will "become" the depositor of
# the given work
#
# @return [Dry::Monads::Result]
def call(obj, user: NullUser.new)
reset = false
obj = Hyrax::ChangeContentDepositorService.call(obj, user, reset)
ContentDepositorChangeEventJob.perform_later(obj, user, reset)

Success(obj)
rescue NoMethodError => err
Failure([err.message, change_set])
end

##
# @api private
class NullUser
##
# @return [nil]
def user_key
nil
end
end
end
end
end
end
1 change: 1 addition & 0 deletions lib/hyrax/transactions/work_create.rb
Expand Up @@ -13,6 +13,7 @@ class WorkCreate < Transaction
'change_set.set_user_as_depositor',
'change_set.apply',
'work_resource.save_acl',
'work_resource.change_content_depositor',
'work_resource.add_file_sets',
'work_resource.add_to_parent'].freeze

Expand Down

0 comments on commit 56e1425

Please sign in to comment.