60 lines
2 KiB
Ruby
60 lines
2 KiB
Ruby
module Api
|
|
module V1
|
|
class CollectionJobAccessoriesController < ApiController
|
|
before_action :restrict_access
|
|
before_action :set_collection_job_accessory, only: [:show, :destroy]
|
|
|
|
def index
|
|
@collection_accessories = current_user.collection_job_accessories
|
|
.includes(job_accessory: :job)
|
|
|
|
@collection_accessories = @collection_accessories.by_job(params[:job_id]) if params[:job_id]
|
|
|
|
render json: Api::V1::CollectionJobAccessoryBlueprint.render(
|
|
@collection_accessories,
|
|
root: :collection_job_accessories
|
|
)
|
|
end
|
|
|
|
def show
|
|
render json: Api::V1::CollectionJobAccessoryBlueprint.render(
|
|
@collection_job_accessory
|
|
)
|
|
end
|
|
|
|
def create
|
|
@collection_accessory = current_user.collection_job_accessories
|
|
.build(collection_job_accessory_params)
|
|
|
|
if @collection_accessory.save
|
|
render json: Api::V1::CollectionJobAccessoryBlueprint.render(
|
|
@collection_accessory
|
|
), status: :created
|
|
else
|
|
# Check for duplicate job accessory error
|
|
if @collection_accessory.errors[:job_accessory_id].any? { |e| e.include?('already exists') }
|
|
raise CollectionErrors::DuplicateJobAccessory.new(@collection_accessory.job_accessory_id)
|
|
end
|
|
render_validation_error_response(@collection_accessory)
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@collection_job_accessory.destroy
|
|
head :no_content
|
|
end
|
|
|
|
private
|
|
|
|
def set_collection_job_accessory
|
|
@collection_job_accessory = current_user.collection_job_accessories.find(params[:id])
|
|
rescue ActiveRecord::RecordNotFound
|
|
raise CollectionErrors::CollectionItemNotFound.new('job accessory', params[:id])
|
|
end
|
|
|
|
def collection_job_accessory_params
|
|
params.require(:collection_job_accessory).permit(:job_accessory_id)
|
|
end
|
|
end
|
|
end
|
|
end
|