mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-15 13:45:25 +08:00
66 lines
2.2 KiB
Ruby
66 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module V2
|
|
class StepsController < ::Api::V1::StepsController
|
|
def index
|
|
steps = timestamps_filter(@protocol.steps).page(params.dig(:page, :number))
|
|
.per(params.dig(:page, :size))
|
|
|
|
render jsonapi: steps, each_serializer: Api::V2::StepSerializer,
|
|
include: include_params,
|
|
rte_rendering: render_rte?,
|
|
team: @team
|
|
end
|
|
|
|
def show
|
|
render jsonapi: @step, serializer: Api::V2::StepSerializer,
|
|
include: include_params,
|
|
rte_rendering: render_rte?,
|
|
team: @team
|
|
end
|
|
|
|
def create
|
|
raise PermissionError.new(Protocol, :create) unless can_manage_protocol_in_module?(@protocol)
|
|
|
|
@protocol.transaction do
|
|
@step = @protocol.steps.create!(
|
|
step_params.merge!(completed: false,
|
|
user: current_user,
|
|
position: @protocol.number_of_steps,
|
|
last_modified_by_id: current_user.id)
|
|
)
|
|
end
|
|
render jsonapi: @step, serializer: Api::V2::StepSerializer, status: :created
|
|
end
|
|
|
|
def update
|
|
@step.assign_attributes(
|
|
step_params.merge!(last_modified_by_id: current_user.id)
|
|
)
|
|
|
|
if @step.changed? && @step.save!
|
|
if @step.saved_change_to_attribute?(:completed)
|
|
completed_steps = @protocol.steps.where(completed: true).count
|
|
all_steps = @protocol.steps.count
|
|
type_of = @step.saved_change_to_attribute(:completed).last ? :complete_step : :uncomplete_step
|
|
log_activity(type_of, my_module: @task.id,
|
|
num_completed: completed_steps.to_s,
|
|
num_all: all_steps.to_s)
|
|
end
|
|
render jsonapi: @step, serializer: Api::V2::StepSerializer, status: :ok
|
|
else
|
|
render body: nil, status: :no_content
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def step_params
|
|
raise TypeError unless params.require(:data).require(:type) == 'steps'
|
|
|
|
params.require(:data).require(:attributes).permit(:name, :completed)
|
|
end
|
|
end
|
|
end
|
|
end
|