add submitter metadata

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

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

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

@ -72,7 +72,7 @@ module Api
submitter_params.permit( submitter_params.permit(
:send_email, :send_sms, :uuid, :name, :email, :role, :send_email, :send_sms, :uuid, :name, :email, :role,
:completed, :phone, :application_key, :external_id, :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]] } fields: [%i[name default_value readonly validation_pattern invalid_message]] }
) )
end end
@ -86,6 +86,7 @@ module Api
submitter.completed_at = attrs[:completed] ? Time.current : submitter.completed_at 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[:application_key] if attrs.key?(:application_key)
submitter.external_id = attrs[:external_id] if attrs.key?(:external_id) 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_submission_fields(submitter.submission)
assign_preferences(submitter, attrs) assign_preferences(submitter, attrs)

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

@ -8,6 +8,7 @@
# completed_at :datetime # completed_at :datetime
# email :string # email :string
# ip :string # ip :string
# metadata :text not null
# name :string # name :string
# opened_at :datetime # opened_at :datetime
# phone :string # phone :string
@ -39,10 +40,12 @@ class Submitter < ApplicationRecord
attribute :values, :string, default: -> { {} } attribute :values, :string, default: -> { {} }
attribute :preferences, :string, default: -> { {} } attribute :preferences, :string, default: -> { {} }
attribute :metadata, :string, default: -> { {} }
attribute :slug, :string, default: -> { SecureRandom.base58(14) } attribute :slug, :string, default: -> { SecureRandom.base58(14) }
serialize :values, coder: JSON serialize :values, coder: JSON
serialize :preferences, coder: JSON serialize :preferences, coder: JSON
serialize :metadata, coder: JSON
has_many_attached :documents has_many_attached :documents
has_many_attached :attachments 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. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -173,6 +173,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_31_212010) do
t.string "phone" t.string "phone"
t.string "external_id" t.string "external_id"
t.text "preferences", null: false t.text "preferences", null: false
t.text "metadata", null: false
t.index ["email"], name: "index_submitters_on_email" t.index ["email"], name: "index_submitters_on_email"
t.index ["slug"], name: "index_submitters_on_slug", unique: true t.index ["slug"], name: "index_submitters_on_slug", unique: true
t.index ["submission_id"], name: "index_submitters_on_submission_id" t.index ["submission_id"], name: "index_submitters_on_submission_id"

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

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

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

@ -19,7 +19,7 @@ module Submitters
serialize_params = { serialize_params = {
include: {}, include: {},
only: %i[id slug uuid name email phone completed_at external_id 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] methods: %i[status application_key]
} }

Loading…
Cancel
Save