simplify submissions api

pull/217/head
Pete Matsyburka 2 years ago
parent c9a1f067ac
commit 89867fdde3

@ -96,7 +96,8 @@ module Api
def create_submissions(template, params) def create_submissions(template, params)
is_send_email = !params[:send_email].in?(['false', false]) is_send_email = !params[:send_email].in?(['false', false])
if (emails = (params[:emails] || params[:email]).presence) && params[:submission].blank? if (emails = (params[:emails] || params[:email]).presence) &&
(params[:submission].blank? && params[:submitters].blank?)
Submissions.create_from_emails(template:, Submissions.create_from_emails(template:,
user: current_user, user: current_user,
source: :api, source: :api,
@ -140,20 +141,27 @@ module Api
end end
def submissions_params def submissions_params
key = params.key?(:submission) ? :submission : :submissions permitted_attrs = [
:send_email, :send_sms, :bcc_completed, :completed_redirect_url,
params.permit( {
key => [
[:send_email, :send_sms, :bcc_completed, :completed_redirect_url, {
message: %i[subject body], message: %i[subject body],
submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role, submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role,
:completed, :phone, :application_key, :completed, :phone, :application_key,
{ values: {}, readonly_fields: [], message: %i[subject body], { values: {}, readonly_fields: [], message: %i[subject body],
fields: [%i[name default_value title description fields: [%i[name default_value title description
readonly validation_pattern invalid_message]] }]] readonly validation_pattern invalid_message]] }]]
}] }
] ]
if params.key?(:submitters)
params.permit(*permitted_attrs)
else
key = params.key?(:submission) ? :submission : :submissions
params.permit(
key => [permitted_attrs]
).fetch(key, []) ).fetch(key, [])
end end
end end
end
end end

@ -35,8 +35,6 @@
--header 'X-Auth-Token: <%= current_user.access_token.token %>' \ --header 'X-Auth-Token: <%= current_user.access_token.token %>' \
--data-raw '{ --data-raw '{
"template_id": <%= current_account.templates.last&.id || 1 %>, "template_id": <%= current_account.templates.last&.id || 1 %>,
"submission": [
{
"submitters": [ "submitters": [
{ {
"name": "John Doe", "name": "John Doe",
@ -48,8 +46,6 @@
}, },
{ "role": "Second Submitter", "email": "<%= current_user.email.sub('@', '+test2@') %>" } { "role": "Second Submitter", "email": "<%= current_user.email.sub('@', '+test2@') %>" }
] ]
}
]
}'<% end.to_str %> }'<% end.to_str %>
<span class="top-0 right-0 absolute"> <span class="top-0 right-0 absolute">
<%= render 'shared/clipboard_copy', icon: 'copy', text:, class: 'btn btn-ghost text-white', icon_class: 'w-6 h-6 text-white', copy_title: 'Copy', copied_title: 'Copied' %> <%= render 'shared/clipboard_copy', icon: 'copy', text:, class: 'btn btn-ghost text-white', icon_class: 'w-6 h-6 text-white', copy_title: 'Copy', copied_title: 'Copied' %>

@ -36,8 +36,6 @@ module Params
message += " in `#{@current_path}`." if @current_path.present? message += " in `#{@current_path}`." if @current_path.present?
raise InvalidParameterError, message unless dry_run? raise InvalidParameterError, message unless dry_run?
Rollbar.error(message) if defined?(Rollbar)
end end
def required(params, keys, message: nil) def required(params, keys, message: nil)

@ -2,13 +2,16 @@
module Params module Params
class SubmissionCreateValidator < BaseValidator class SubmissionCreateValidator < BaseValidator
# rubocop:disable Metrics
def call def call
if params[:submission].blank? && (params[:emails].present? || params[:email].present?) if params[:submission].blank? && (params[:emails].present? || params[:email].present?)
validate_creation_from_emails(params) validate_creation_from_emails(params)
elsif params[:submitters].present?
validate_creation_from_submitters(params)
else else
validate_creation_from_submission(params) validate_creation_from_submission(params)
end end
true
end end
def validate_creation_from_emails(params) def validate_creation_from_emails(params)
@ -25,13 +28,11 @@ module Params
required(message_params, :body) required(message_params, :body)
end end
true
end end
def validate_creation_from_submission(params) def validate_creation_from_submitters(params)
required(params, :template_id) required(params, :template_id)
required(params, %i[submission submissions]) required(params, :submitters)
boolean(params, :send_email) boolean(params, :send_email)
boolean(params, :send_sms) boolean(params, :send_sms)
@ -49,13 +50,12 @@ module Params
value_in(params, :order, %w[preserved random], allow_nil: true) value_in(params, :order, %w[preserved random], allow_nil: true)
return true if params[:submission].is_a?(Array) in_path_each(params, :submitters) do |submitter_params|
validate_submitter(submitter_params)
in_path(params, :submission) do |submission_params| end
required(submission_params, :submitters) if params[:submission]
end end
in_path_each(params, %i[submission submitters]) do |submitter_params| def validate_submitter(submitter_params)
required(submitter_params, %i[email phone name]) required(submitter_params, %i[email phone name])
type(submitter_params, :name, String) type(submitter_params, :name, String)
@ -70,7 +70,7 @@ module Params
type(submitter_params, :completed_redirect_url, String) type(submitter_params, :completed_redirect_url, String)
type(submitter_params, :fields, Array) type(submitter_params, :fields, Array)
in_path_each(submitter_params, %i[fields]) do |field_params| in_path_each(submitter_params, :fields) do |field_params|
required(field_params, :name) required(field_params, :name)
type(field_params, :name, String) type(field_params, :name, String)
@ -80,8 +80,35 @@ module Params
end end
end end
true def validate_creation_from_submission(params)
required(params, :template_id)
required(params, %i[submission submissions])
boolean(params, :send_email)
boolean(params, :send_sms)
type(params, :order, String)
type(params, :completed_redirect_url, String)
type(params, :bcc_completed, String)
type(params, :message, Hash)
in_path(params, :message) do |message_params|
type(message_params, :subject, String)
type(message_params, :body, String)
required(message_params, :body)
end
value_in(params, :order, %w[preserved random], allow_nil: true)
return true if params[:submission].is_a?(Array)
in_path(params, :submission) do |submission_params|
required(submission_params, :submitters) if params[:submission]
end
in_path_each(params, %i[submission submitters]) do |submitter_params|
validate_submitter(submitter_params)
end
end end
# rubocop:enable Metrics
end end
end end

Loading…
Cancel
Save