From 7856f7a134db63dbab50d1ab3f58fddf9eac49c5 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 6 Dec 2023 11:29:55 +0200 Subject: [PATCH] add template clone api endpoint --- .../api/templates_clone_controller.rb | 38 +++++++++++++++++++ config/routes.rb | 1 + 2 files changed, 39 insertions(+) create mode 100644 app/controllers/api/templates_clone_controller.rb diff --git a/app/controllers/api/templates_clone_controller.rb b/app/controllers/api/templates_clone_controller.rb new file mode 100644 index 00000000..45c76076 --- /dev/null +++ b/app/controllers/api/templates_clone_controller.rb @@ -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 diff --git a/config/routes.rb b/config/routes.rb index a73c17a0..f613641f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -42,6 +42,7 @@ Rails.application.routes.draw do end end resources :templates, only: %i[update show index destroy] do + resources :clone, only: %i[create], controller: 'templates_clone' resources :submissions, only: %i[index create] resources :documents, only: %i[create], controller: 'templates_documents' end