scinote-web/app/controllers/api/v2/steps_controller.rb

67 lines
2.2 KiB
Ruby
Raw Normal View History

# 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: StepSerializer,
include: include_params,
rte_rendering: render_rte?,
team: @team
end
def show
render jsonapi: @step, serializer: 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: 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: 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