Skip to content
Snippets Groups Projects
learning_objects_controller.rb 1.96 KiB
Newer Older
require 'uri'

class V1::LearningObjectsController < ApplicationController
  include ::SociableController

  before_action :authenticate_user!, except: [:index, :show]
  before_action :set_learning_object, only: [:show, :create, :update, :destroy]
  before_action :authorize!

  def index
    render json: LearningObject.all
  end

  # GET /learning_objects/1
  # GET /learning_objects/1.json
  def show
    render json: @learning_object
  end

  # POST /learning_objects
  # POST /learning_objects.json
  def create
    @learning_object = ::LearningObject::DraftBuilder.build current_user, learning_object_params
    publisher = LearningObjectPublisher.new(DspaceService.create_client)

    if publisher.create_draft @learning_object
      render json: @learning_object, status: :created
    else
      render json: @learning_object.errors, status: :unprocessable_entity
    end
  end

  # PATCH/PUT /learning_objects/1
  # PATCH/PUT /learning_objects/1.json
  def update
    if LearningObject.update(learning_object_params)
      render json: @learning_object, status: :ok
    else
      render json: @learning_object.errors, status: :unprocessable_entity
    end
  end

  # DELETE /learning_objects/1
  # DELETE /learning_objects/1.json
  def destroy
    LearningObject.destroy @learning_object
    render nothing: true, status: :ok
  end

  private

  def sociable
    set_learning_object
  end

  def taggable
    set_learning_object
  end

  # Use callbacks to share common setup or constraints between actions.
  def set_learning_object
    @learning_object ||= LearningObject.unscoped.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def learning_object_params
    params[:learning_object].permit(:author, :name, :object_type_id, :description, :school_level, :language, :link, topics: [])
  end

  def authorize!
    @learning_object ||= LearningObject.new
    authorize @learning_object
  end

end