add source to submissions

pull/105/head
Alex Turchyn 2 years ago
parent e4bb5466f5
commit 644b142798

@ -27,7 +27,7 @@ Lint/MissingSuper:
Enabled: false
Metrics/MethodLength:
Max: 20
Max: 25
Exclude:
- 'db/migrate/**'

@ -9,11 +9,13 @@ module Api
if params[:emails].present?
Submissions.create_from_emails(template:,
user: current_user,
source: :api,
send_email: params[:send_email] != 'false',
emails: params[:emails])
else
Submissions.create_from_submitters(template:,
user: current_user,
source: :api,
send_email: params[:send_email] != 'false',
submissions_attrs: submissions_params[:submission])
end

@ -25,7 +25,7 @@ class StartFormController < ApplicationController
ua: request.user_agent
)
@submitter.submission ||= Submission.new(template: @template)
@submitter.submission ||= Submission.new(template: @template, source: :link)
if @submitter.save
redirect_to submit_form_path(@submitter.slug)

@ -19,11 +19,13 @@ class SubmissionsController < ApplicationController
if params[:emails].present?
Submissions.create_from_emails(template: @template,
user: current_user,
source: :invite,
send_email: params[:send_email] == '1',
emails: params[:emails])
else
Submissions.create_from_submitters(template: @template,
user: current_user,
source: :invite,
send_email: params[:send_email] == '1',
submissions_attrs: submissions_params[:submission].to_h.values)
end

@ -6,6 +6,7 @@
#
# id :bigint not null, primary key
# deleted_at :datetime
# source :text not null
# template_fields :text
# template_schema :text
# template_submitters :text
@ -35,5 +36,14 @@ class Submission < ApplicationRecord
serialize :template_schema, JSON
serialize :template_submitters, JSON
attribute :source, :string, default: 'link'
scope :active, -> { where(deleted_at: nil) }
enum :source, {
invite: 'invite',
api: 'api',
embed: 'embed',
link: 'link'
}, scope: false, prefix: true
end

@ -0,0 +1,19 @@
# frozen_string_literal: true
class AddSourceToSubmissions < ActiveRecord::Migration[7.0]
class MigrationSubmission < ApplicationRecord
self.table_name = 'submissions'
end
def up
add_column :submissions, :source, :text
MigrationSubmission.where(source: nil).update_all(source: :invite)
change_column_null :submissions, :source, false
end
def down
drop_column :submissions, :source
end
end

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2023_08_03_200825) do
ActiveRecord::Schema[7.0].define(version: 2023_08_05_124454) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -80,6 +80,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_03_200825) do
t.text "template_fields"
t.text "template_schema"
t.text "template_submitters"
t.text "source", null: false
t.index ["created_by_user_id"], name: "index_submissions_on_created_by_user_id"
t.index ["template_id"], name: "index_submissions_on_template_id"
end

@ -11,21 +11,22 @@ module Submissions
submission.save!
end
def create_from_emails(template:, user:, emails:, send_email: false)
def create_from_emails(template:, user:, emails:, source:, send_email: false)
emails = emails.to_s.scan(User::EMAIL_REGEXP)
emails.map do |email|
submission = template.submissions.new(created_by_user: user)
submission.submitters.new(email:, uuid: template.submitters.first['uuid'],
submission = template.submissions.new(created_by_user: user, source:)
submission.submitters.new(email:,
uuid: template.submitters.first['uuid'],
sent_at: send_email ? Time.current : nil)
submission.tap(&:save!)
end
end
def create_from_submitters(template:, user:, submissions_attrs:, send_email: false)
def create_from_submitters(template:, user:, submissions_attrs:, source:, send_email: false)
submissions_attrs.map do |attrs|
submission = template.submissions.new(created_by_user: user)
submission = template.submissions.new(created_by_user: user, source:)
attrs[:submitters].each_with_index do |submitter_attrs, index|
uuid =
@ -35,7 +36,9 @@ module Submissions
next if uuid.blank?
submission.submitters.new(email: submitter_attrs[:email], uuid:, sent_at: send_email ? Time.current : nil)
submission.submitters.new(email: submitter_attrs[:email],
sent_at: send_email ? Time.current : nil,
uuid:)
end
submission.tap(&:save!)

Loading…
Cancel
Save