Sha256: ef1955d5007514d1aab57c1e83f306da27c0ec2d02557f4d0d23dc67353e7a5d

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true
require 'dry/monads'

module Hyrax
  module Transactions
    module Steps
      ##
      # Deletes a resource from the persister, returning a `Dry::Monads::Result`
      # (`Success`|`Failure`).
      #
      # @see https://dry-rb.org/gems/dry-monads/1.0/result/
      class DeleteAllFileMetadata
        include Dry::Monads[:result]

        ##
        # @params [#save] persister
        def initialize(property: :file_ids, query_service: Hyrax.query_service, persister: Hyrax.persister, publisher: Hyrax.publisher)
          @property = property
          @persister = persister
          @query_service = query_service
          @publisher = publisher
        end

        ##
        # @param [Valkyrie::Resource] resource
        # @param [::User] the user resposible for the delete action
        #
        # @return [Dry::Monads::Result]
        def call(resource)
          return Failure(:resource_not_persisted) unless resource.persisted?

          resource[@property].each do |file_id|
            return Failure[:failed_to_delete_file_metadata, file_id] unless
              Hyrax::Transactions::Container['file_metadata.destroy']
              .call(@query_service.custom_queries.find_file_metadata_by(id: file_id))
              .success?
          rescue ::Ldp::Gone
            nil
          end

          Success(resource)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hyrax-5.0.0 lib/hyrax/transactions/steps/delete_all_file_metadata.rb
hyrax-5.0.0.rc3 lib/hyrax/transactions/steps/delete_all_file_metadata.rb
hyrax-5.0.0.rc2 lib/hyrax/transactions/steps/delete_all_file_metadata.rb