add submitter metadata

pull/217/head
Pete Matsyburka 2 years ago
parent 3781b0aa72
commit 07f0fbb50f

@ -44,7 +44,7 @@ Layout/LineLength:
AllowedPatterns: ['\A\s*#']
Metrics/AbcSize:
Max: 35
Max: 40
Metrics/ModuleLength:
Max: 500

@ -132,7 +132,7 @@ module Api
include: {
submitters: { only: %i[id slug uuid name email phone
completed_at opened_at sent_at
created_at updated_at external_id],
created_at updated_at external_id metadata],
methods: %i[status application_key] },
template: { only: %i[id name created_at updated_at] },
created_by_user: { only: %i[id email first_name last_name] }
@ -147,7 +147,7 @@ module Api
message: %i[subject body],
submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role,
:completed, :phone, :application_key, :external_id,
{ values: {}, readonly_fields: [], message: %i[subject body],
{ metadata: {}, values: {}, readonly_fields: [], message: %i[subject body],
fields: [%i[name default_value title description
readonly validation_pattern invalid_message]] }]]
}

@ -72,7 +72,7 @@ module Api
submitter_params.permit(
:send_email, :send_sms, :uuid, :name, :email, :role,
:completed, :phone, :application_key, :external_id,
{ values: {}, readonly_fields: [], message: %i[subject body],
{ metadata: {}, values: {}, readonly_fields: [], message: %i[subject body],
fields: [%i[name default_value readonly validation_pattern invalid_message]] }
)
end
@ -86,6 +86,7 @@ module Api
submitter.completed_at = attrs[:completed] ? Time.current : submitter.completed_at
submitter.external_id = attrs[:application_key] if attrs.key?(:application_key)
submitter.external_id = attrs[:external_id] if attrs.key?(:external_id)
submitter.metadata = attrs[:metadata] if attrs.key?(:metadata)
assign_submission_fields(submitter.submission)
assign_preferences(submitter, attrs)

@ -57,7 +57,8 @@ class StartFormController < ApplicationController
ip: request.remote_ip,
ua: request.user_agent,
values: resubmit_submitter&.preferences&.fetch('default_values', nil) || {},
preferences: resubmit_submitter&.preferences.presence || { 'send_email' => true }
preferences: resubmit_submitter&.preferences.presence || { 'send_email' => true },
metadata: resubmit_submitter&.metadata.presence || {}
)
if submitter.values.present?

@ -8,6 +8,7 @@
# completed_at :datetime
# email :string
# ip :string
# metadata :text not null
# name :string
# opened_at :datetime
# phone :string
@ -39,10 +40,12 @@ class Submitter < ApplicationRecord
attribute :values, :string, default: -> { {} }
attribute :preferences, :string, default: -> { {} }
attribute :metadata, :string, default: -> { {} }
attribute :slug, :string, default: -> { SecureRandom.base58(14) }
serialize :values, coder: JSON
serialize :preferences, coder: JSON
serialize :metadata, coder: JSON
has_many_attached :documents
has_many_attached :attachments

@ -0,0 +1,15 @@
# frozen_string_literal: true
class AddSubmitterMetadata < ActiveRecord::Migration[7.1]
class MigrationSubmitter < ApplicationRecord
self.table_name = 'submitters'
end
def change
add_column :submitters, :metadata, :text
MigrationSubmitter.where(metadata: nil).update_all(metadata: '{}')
change_column_null :submitters, :metadata, false
end
end

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2024_01_31_212010) do
ActiveRecord::Schema[7.1].define(version: 2024_02_01_210319) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -173,6 +173,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_31_212010) do
t.string "phone"
t.string "external_id"
t.text "preferences", null: false
t.text "metadata", null: false
t.index ["email"], name: "index_submitters_on_email"
t.index ["slug"], name: "index_submitters_on_slug", unique: true
t.index ["submission_id"], name: "index_submitters_on_submission_id"

@ -69,6 +69,7 @@ module Params
format(submitter_params, :phone, /\A\+\d+\z/,
message: 'phone should start with +<country code> and contain only digits')
type(submitter_params, :values, Hash)
type(submitter_params, :metadata, Hash)
boolean(submitter_params, :send_email)
boolean(submitter_params, :send_sms)
type(submitter_params, :completed_redirect_url, String)

@ -139,6 +139,7 @@ module Submissions
completed_at: attrs[:completed] ? Time.current : nil,
sent_at: mark_as_sent && email.present? && is_order_sent ? Time.current : nil,
values: attrs[:values] || {},
metadata: attrs[:metadata] || {},
preferences: preferences.merge(submitter_preferences)
.merge({ default_values: attrs[:values] }.compact_blank)
.except('bcc_completed'),

@ -30,7 +30,6 @@ module Submitters
)
end
# rubocop:disable Metrics
def generate_stamp_image(submitter)
logo = Vips::Image.new_from_buffer(load_logo(submitter).read, '')
@ -82,7 +81,6 @@ module Submitters
Vips::Image.text(text, width: WIDTH, height: HEIGHT)
end
# rubocop:enable Metrics
def load_logo(_submitter)
PdfIcons.logo_io

@ -19,7 +19,7 @@ module Submitters
serialize_params = {
include: {},
only: %i[id slug uuid name email phone completed_at external_id
opened_at sent_at created_at updated_at],
metadata opened_at sent_at created_at updated_at],
methods: %i[status application_key]
}

Loading…
Cancel
Save