crowdAI/crowdai

View on GitHub
app/controllers/task_dataset_files_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class TaskDatasetFilesController < ApplicationController
  before_action :authenticate_participant!
  before_action :set_task_dataset_file, only: [:destroy]
  before_action :set_clef_task
  before_action :set_s3_direct_post, only: [:new, :create]

  def index
    @challenge = Challenge.find(params[:challenge_id])
    @task_dataset_files = @clef_task.task_dataset_files
    js challenge_id: @challenge.id
  end

  def show
  end

  def new
    @task_dataset_file = @clef_task.task_dataset_files.new
    authorize @task_dataset_file
  end

  def create
    @task_dataset_file = @clef_task.task_dataset_files.new(task_dataset_file_params)
    if @task_dataset_file.save
      redirect_to organizer_clef_tasks_path(@clef_task.organizer),
                  notice: 'Dataset file was successfully created.'
    else
      render :new
    end
  end

  def destroy
    s3 = Aws::S3::Client.new
    unless @task_dataset_file.dataset_file_s3_key.nil?
      s3.delete_object(key: @task_dataset_file.dataset_file_s3_key, bucket: ENV['AWS_S3_BUCKET'])
    end
    @task_dataset_file.destroy

    redirect_to organizer_clef_tasks_path(@clef_task.organizer),
        notice: "Dataset file #{@task_dataset_file.title} was deleted."
  end

  private
  def set_task_dataset_file
    @task_dataset_file = TaskDatasetFile.find(params[:id])
  end

  def set_clef_task
    @clef_task = ClefTask.find(params[:clef_task_id])
  end

  def task_dataset_file_params
    params.require(:task_dataset_file)
          .permit(:seq,
                  :description,
                  :evaluation,
                  :title,
                  :dataset_file_s3_key)
  end

  def set_s3_direct_post
    @s3_direct_post = S3_BUCKET.presigned_post(key: "task_dataset_files/clef_task_#{@clef_task.id}/#{SecureRandom.uuid}_${filename}",
                                               success_action_status: '201',
                                               acl: 'private')
  end

end