add submitter metadata
This commit is contained in:
+1
-1
@@ -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
|
||||||
+2
-1
@@ -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]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user