synchronize documents generation

This commit is contained in:
Alex Turchyn
2023-07-01 13:16:07 +03:00
parent e55b5b47cd
commit 4180d02a1b
15 changed files with 148 additions and 12 deletions
@@ -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|
+2 -2
View File
@@ -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)
@@ -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|
@@ -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
+4
View File
@@ -0,0 +1,4 @@
# frozen_string_literal: true
class ApplicationJob < ActiveJob::Base
end
@@ -0,0 +1,7 @@
# frozen_string_literal: true
class GenerateSubmitterResultAttachmentsJob < ApplicationJob
def perform(submitter)
Submissions::EnsureResultGenerated.call(submitter)
end
end
+3
View File
@@ -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|
+31
View File
@@ -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
+2
View File
@@ -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'
+1 -1
View File
@@ -33,7 +33,7 @@
<%= f.email_field :email, required: true, class: 'base-input', placeholder: 'Provide your email to start' %>
</div>
<div class="form-control">
<%= f.button button_title(title: 'Start'), class: 'base-button' %>
<%= f.button button_title(title: 'Start', disabled_with: 'Starting'), class: 'base-button' %>
</div>
<% end %>
</div>