sul-dlss/argo

View on GitHub
app/controllers/uploads_controller.rb

Summary

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

# Handles the HTTP interaction for creating bulk metadata uploads for an APO
class UploadsController < ApplicationController
  # GET /apos/:apo_id/uploads/new
  def new; end

  # Lets the user start a bulk metadata job (i.e. upload a metadata spreadsheet/XML file).
  # POST /apos/:apo_id/uploads
  def create
    directory_name = Time.zone.now.strftime('%Y_%m_%d_%H_%M_%S_%L')
    output_directory = File.join(Settings.bulk_metadata.directory, params[:apo_id], directory_name)
    temp_spreadsheet_filename = "#{params[:spreadsheet_file].original_filename}.#{directory_name}"

    # Temporary files are sometimes garbage collected before the job is run, so make a copy and let the job delete it when it's done.
    temp_filename = make_tmp_filename(temp_spreadsheet_filename)
    FileUtils.copy(params[:spreadsheet_file].path, temp_filename)
    ModsulatorJob.perform_later(params[:apo_id],
                                temp_filename.to_s,
                                output_directory,
                                current_user,
                                current_user.groups,
                                params[:filetypes],
                                params[:note])

    redirect_to apo_bulk_jobs_path(params[:apo_id]), notice: 'Bulk processing started'
  end

  private

  def make_tmp_filename(temp_spreadsheet_filename)
    FileUtils.mkdir_p(Settings.bulk_metadata.temporary_directory)
    File.join(Settings.bulk_metadata.temporary_directory, temp_spreadsheet_filename)
  end
end