From 644b14279800d0210b24e88a127515c6b213a1b5 Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Sat, 5 Aug 2023 19:20:06 +0300 Subject: [PATCH] add source to submissions --- .rubocop.yml | 2 +- app/controllers/api/submissions_controller.rb | 2 ++ app/controllers/start_form_controller.rb | 2 +- app/controllers/submissions_controller.rb | 2 ++ app/models/submission.rb | 10 ++++++++++ ...0230805124454_add_source_to_submissions.rb | 19 +++++++++++++++++++ db/schema.rb | 3 ++- lib/submissions.rb | 15 +++++++++------ 8 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20230805124454_add_source_to_submissions.rb diff --git a/.rubocop.yml b/.rubocop.yml index 2373888a..a83324d7 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -27,7 +27,7 @@ Lint/MissingSuper: Enabled: false Metrics/MethodLength: - Max: 20 + Max: 25 Exclude: - 'db/migrate/**' diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index a63f0ce7..2fc30c4c 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -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 diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index a6e0ccea..57df31ef 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -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) diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index f9fe3b79..69cd6199 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -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 diff --git a/app/models/submission.rb b/app/models/submission.rb index c7f3e0c2..5ffcaf95 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -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 diff --git a/db/migrate/20230805124454_add_source_to_submissions.rb b/db/migrate/20230805124454_add_source_to_submissions.rb new file mode 100644 index 00000000..eafe68a4 --- /dev/null +++ b/db/migrate/20230805124454_add_source_to_submissions.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 3760170f..304efa17 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 diff --git a/lib/submissions.rb b/lib/submissions.rb index 043ba379..69530e6a 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -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!)