sul-dlss/argo

View on GitHub
app/jobs/validate_cocina_descriptive_job.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

class ValidateCocinaDescriptiveJob < GenericJob
  queue_as :default

  ##
  # A job that allows a user to verify that a spreadsheet for descriptive upload is valid
  # @param [Integer] bulk_action_id GlobalID for a BulkAction object
  # @param [Hash] params additional parameters that an Argo job may need
  # @option params [String] :csv_file csv data to validate
  def perform(bulk_action_id, params)
    super

    csv = CSV.parse(params[:csv_file], headers: true)
    with_csv_items(csv, name: 'Validate Cocina descriptive metadata') do |cocina_object, csv_row, success, failure|
      DescriptionImport.import(csv_row:)
                       .bind { |description| CocinaValidator.validate(cocina_object, description:) }
                       .either(
                         ->(_validated) { success.call('Successfully validated') },
                         ->(error) { failure.call(error) }
                       )
    end
  end
end