add template clone api endpoint
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Api
|
||||||
|
class TemplatesCloneController < ApiBaseController
|
||||||
|
load_and_authorize_resource :template
|
||||||
|
|
||||||
|
def create
|
||||||
|
authorize!(:manage, @template)
|
||||||
|
|
||||||
|
template = current_account.templates.new(source: :api)
|
||||||
|
|
||||||
|
template.application_key = params[:application_key]
|
||||||
|
template.name = params[:name] || "#{@template.name} (Clone)"
|
||||||
|
template.account = @template.account
|
||||||
|
template.author = current_user
|
||||||
|
template.assign_attributes(@template.slice(:folder_id, :fields, :schema, :submitters))
|
||||||
|
|
||||||
|
if params[:folder_name].present?
|
||||||
|
template.folder = TemplateFolders.find_or_create_by_name(current_user, params[:folder_name])
|
||||||
|
end
|
||||||
|
|
||||||
|
template.save!
|
||||||
|
|
||||||
|
Templates::CloneAttachments.call(template:, original_template: @template)
|
||||||
|
|
||||||
|
render json: template.as_json(serialize_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def serialize_params
|
||||||
|
{
|
||||||
|
include: { author: { only: %i[id email first_name last_name] },
|
||||||
|
documents: { only: %i[id uuid], methods: %i[url filename] } }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -42,6 +42,7 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :templates, only: %i[update show index destroy] do
|
resources :templates, only: %i[update show index destroy] do
|
||||||
|
resources :clone, only: %i[create], controller: 'templates_clone'
|
||||||
resources :submissions, only: %i[index create]
|
resources :submissions, only: %i[index create]
|
||||||
resources :documents, only: %i[create], controller: 'templates_documents'
|
resources :documents, only: %i[create], controller: 'templates_documents'
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user