mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-16 14:17:00 +08:00
45 lines
1.4 KiB
Ruby
45 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module Service
|
|
class ProtocolsController < BaseController
|
|
include Api::Service::ReorderValidation
|
|
|
|
before_action :load_protocol
|
|
before_action :validate_step_order, only: :reorder_steps
|
|
|
|
def reorder_steps
|
|
@protocol.with_lock do
|
|
step_reorder_params.each do |order|
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
@protocol.steps.find(order['id']).update_column(:position, order['position'])
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
end
|
|
@protocol.touch
|
|
rescue StandardError
|
|
head :bad_request
|
|
end
|
|
|
|
render json: @protocol.steps, each_serializer: Api::V1::StepSerializer
|
|
end
|
|
|
|
private
|
|
|
|
def load_protocol
|
|
@protocol = Protocol.find(params.require(:protocol_id))
|
|
raise PermissionError.new(Protocol, :manage) unless can_manage_protocol_in_module?(@protocol)
|
|
end
|
|
|
|
def step_reorder_params
|
|
params.require(:step_order).map { |o| o.permit(:id, :position).to_h }
|
|
end
|
|
|
|
def validate_step_order
|
|
unless reorder_params_valid?(@protocol.steps, step_reorder_params)
|
|
render json: { error: I18n.t('activerecord.errors.models.protocol.attributes.step_order.invalid') },
|
|
status: :bad_request
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|