Sha256: 61b0c6a530eb205dfffbe2b396c6b011b9cc6a30579cb0a0ddfea58f0749faeb

Contents?: true

Size: 1.31 KB

Versions: 8

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module SdrClient
  class RedesignedClient
    # Updates a DRO so that the structural metadata references the uploaded file ids
    class UpdateDroWithFileIdentifiers
      # @param [Cocina::Model::RequestDRO] request_dro for depositing
      # @param [Array<DirectUploadResponse>] upload_responses the responses from uploading files
      # @return [Cocina::Models::RequestDRO]
      def self.update(request_dro:, upload_responses:)
        # Manipulating request_dro as hash since immutable
        structural = request_dro.to_h[:structural]
        return request_dro.new({}) unless structural

        signed_ids = signed_id_map(upload_responses)
        request_dro.new(structural: updated_structural(structural, signed_ids))
      end

      def self.signed_id_map(upload_responses)
        upload_responses.to_h { |response| [response.filename, response.signed_id] }
      end
      private_class_method :signed_id_map

      def self.updated_structural(structural, signed_ids)
        structural[:contains].each do |file_set|
          file_set[:structural][:contains].each do |file|
            file[:externalIdentifier] = signed_ids[file[:filename]] if signed_ids.key?(file[:filename])
          end
        end
        structural
      end
      private_class_method :updated_structural
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
sdr-client-2.18.0 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.17.0 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.16.0 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.13.2 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.13.1 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.13.0 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.13.0.beta2 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
sdr-client-2.13.0.beta1 lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb