diff --git a/.rubocop.yml b/.rubocop.yml index 4406e2f2..3926846b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -31,10 +31,13 @@ Metrics/MethodLength: - 'db/migrate/**' Metrics/CyclomaticComplexity: - Max: 10 + Max: 15 Metrics/PerceivedComplexity: - Max: 10 + Max: 15 + +Layout/LineLength: + AllowedPatterns: ['\A\s*#'] Metrics/AbcSize: Max: 35 diff --git a/app/controllers/send_submission_email_controller.rb b/app/controllers/send_submission_email_controller.rb index e4d1d1c8..cd61045a 100644 --- a/app/controllers/send_submission_email_controller.rb +++ b/app/controllers/send_submission_email_controller.rb @@ -17,8 +17,6 @@ class SendSubmissionEmailController < ApplicationController Submitter.find_by!(slug: params[:submitter_slug]) end - Submissions::GenerateResultAttachments.call(@submitter) if @submitter.documents.blank? - SubmitterMailer.documents_copy_email(@submitter).deliver_later! respond_to do |f| diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index 93ca4fbf..a6e0ccea 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -13,7 +13,7 @@ class StartFormController < ApplicationController def update @submitter = Submitter.where(submission: @template.submissions.where(deleted_at: nil)) - .find_or_initialize_by(**submitter_params) + .find_or_initialize_by(email: submitter_params[:email]) if @submitter.completed_at? redirect_to start_form_completed_path(@template.slug, email: submitter_params[:email]) @@ -25,7 +25,7 @@ class StartFormController < ApplicationController ua: request.user_agent ) - @submitter.build_submission(template: @template) + @submitter.submission ||= Submission.new(template: @template) if @submitter.save redirect_to submit_form_path(@submitter.slug) diff --git a/app/controllers/submissions_download_controller.rb b/app/controllers/submissions_download_controller.rb index 45b688d8..21a6076c 100644 --- a/app/controllers/submissions_download_controller.rb +++ b/app/controllers/submissions_download_controller.rb @@ -6,7 +6,7 @@ class SubmissionsDownloadController < ApplicationController def index submitter = Submitter.find_by(slug: params[:submitter_slug]) - Submissions::GenerateResultAttachments.call(submitter) if submitter.documents.blank? + Submissions::EnsureResultGenerated.call(submitter) urls = Submitters.select_attachments_for_download(submitter).map do |attachment| diff --git a/app/controllers/submit_form_controller.rb b/app/controllers/submit_form_controller.rb index c014b6d7..e1257d5b 100644 --- a/app/controllers/submit_form_controller.rb +++ b/app/controllers/submit_form_controller.rb @@ -24,6 +24,8 @@ class SubmitFormController < ApplicationController submitter.save! if submitter.completed_at? + GenerateSubmitterResultAttachmentsJob.perform_later(submitter) + submitter.submission.template.account.users.active.each do |user| SubmitterMailer.completed_email(submitter, user).deliver_later! end diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 00000000..d92ffddc --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class ApplicationJob < ActiveJob::Base +end diff --git a/app/jobs/generate_submitter_result_attachments_job.rb b/app/jobs/generate_submitter_result_attachments_job.rb new file mode 100644 index 00000000..b250b5d9 --- /dev/null +++ b/app/jobs/generate_submitter_result_attachments_job.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class GenerateSubmitterResultAttachmentsJob < ApplicationJob + def perform(submitter) + Submissions::EnsureResultGenerated.call(submitter) + end +end diff --git a/app/mailers/submitter_mailer.rb b/app/mailers/submitter_mailer.rb index d66ef55c..edf8935d 100644 --- a/app/mailers/submitter_mailer.rb +++ b/app/mailers/submitter_mailer.rb @@ -21,6 +21,9 @@ class SubmitterMailer < ApplicationMailer def documents_copy_email(submitter) @submitter = submitter + + Submissions::EnsureResultGenerated.call(@submitter) + @documents = Submitters.select_attachments_for_download(submitter) @documents.each do |attachment| diff --git a/app/models/document_generation_event.rb b/app/models/document_generation_event.rb new file mode 100644 index 00000000..95daafa6 --- /dev/null +++ b/app/models/document_generation_event.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: document_generation_events +# +# id :bigint not null, primary key +# event_name :string not null +# created_at :datetime not null +# updated_at :datetime not null +# submitter_id :bigint not null +# +# Indexes +# +# index_document_generation_events_on_submitter_id (submitter_id) +# index_document_generation_events_on_submitter_id_and_event_name (submitter_id,event_name) UNIQUE WHERE ((event_name)::text = ANY ((ARRAY['start'::character varying, 'complete'::character varying])::text[])) +# +# Foreign Keys +# +# fk_rails_... (submitter_id => submitters.id) +# +class DocumentGenerationEvent < ApplicationRecord + belongs_to :submitter + + enum :event_name, { + complete: 'complete', + fail: 'fail', + start: 'start', + retry: 'retry' + }, scope: false +end diff --git a/app/models/submitter.rb b/app/models/submitter.rb index 9ea4f8d8..cedca938 100644 --- a/app/models/submitter.rb +++ b/app/models/submitter.rb @@ -39,6 +39,8 @@ class Submitter < ApplicationRecord has_many_attached :documents has_many_attached :attachments + has_many :document_generation_events, dependent: :destroy + def status if completed_at? 'completed' diff --git a/app/views/start_form/show.html.erb b/app/views/start_form/show.html.erb index bfa58bf6..135a2f7f 100644 --- a/app/views/start_form/show.html.erb +++ b/app/views/start_form/show.html.erb @@ -33,7 +33,7 @@ <%= f.email_field :email, required: true, class: 'base-input', placeholder: 'Provide your email to start' %>