diff --git a/.rubocop.yml b/.rubocop.yml index 5e4b6895..bde22067 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -44,7 +44,7 @@ Layout/LineLength: AllowedPatterns: ['\A\s*#'] Metrics/AbcSize: - Max: 35 + Max: 40 Metrics/ModuleLength: Max: 500 diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 9e39199b..fbf2b621 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -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]] }]] } diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index 3853ea54..03fed6f3 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -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) diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index d19c69b1..1298f866 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -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? diff --git a/app/models/submitter.rb b/app/models/submitter.rb index 64a523a2..382aca24 100644 --- a/app/models/submitter.rb +++ b/app/models/submitter.rb @@ -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 diff --git a/db/migrate/20240201210319_add_submitter_metadata.rb b/db/migrate/20240201210319_add_submitter_metadata.rb new file mode 100644 index 00000000..9e747b65 --- /dev/null +++ b/db/migrate/20240201210319_add_submitter_metadata.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 2903b6c5..9f65c37b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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" diff --git a/lib/params/submission_create_validator.rb b/lib/params/submission_create_validator.rb index bf343a68..e4a309c0 100644 --- a/lib/params/submission_create_validator.rb +++ b/lib/params/submission_create_validator.rb @@ -69,6 +69,7 @@ module Params format(submitter_params, :phone, /\A\+\d+\z/, message: 'phone should start with + 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) diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index 615ec375..9d282bd4 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -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'), diff --git a/lib/submitters/create_stamp_attachment.rb b/lib/submitters/create_stamp_attachment.rb index 8635cb57..c695890b 100644 --- a/lib/submitters/create_stamp_attachment.rb +++ b/lib/submitters/create_stamp_attachment.rb @@ -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 diff --git a/lib/submitters/serialize_for_api.rb b/lib/submitters/serialize_for_api.rb index 7d8ec48f..aedeab2b 100644 --- a/lib/submitters/serialize_for_api.rb +++ b/lib/submitters/serialize_for_api.rb @@ -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] }