mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-12 12:16:06 +08:00
28 lines
1 KiB
Ruby
28 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Api
|
||
|
module Service
|
||
|
class ExperimentsController < BaseController
|
||
|
before_action :load_team
|
||
|
|
||
|
def clone
|
||
|
@project = @team.projects.find(params.require(:clone_experiment).require(:to_project_id))
|
||
|
raise PermissionError.new(Project, :create_project_experiments) unless can_create_project_experiments?(@project)
|
||
|
|
||
|
@experiment = Experiment.find(params.require(:clone_experiment).require(:experiment_id))
|
||
|
raise PermissionError.new(Experiment, :manage) unless can_clone_experiment?(@experiment)
|
||
|
|
||
|
service = Experiments::CopyExperimentAsTemplateService.call(experiment: @experiment,
|
||
|
project: @project,
|
||
|
user: current_user)
|
||
|
|
||
|
if service.succeed?
|
||
|
render jsonapi: service.cloned_experiment, serializer: Api::V1::ExperimentSerializer
|
||
|
else
|
||
|
render json: service.errors, status: :error
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|