From 8e8e5e0e294e73bd7099a55a9a9a8741c08d3c19 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Fri, 12 Sep 2025 12:17:26 +0300 Subject: [PATCH] add template variables --- app/controllers/api/submissions_controller.rb | 1 + app/models/submission.rb | 4 +++ app/models/template.rb | 34 ++++++++++--------- .../20250912090605_add_template_variables.rb | 9 +++++ db/schema.rb | 5 ++- lib/submissions.rb | 1 + lib/submissions/create_from_submitters.rb | 4 ++- lib/submissions/serialize_for_api.rb | 1 + lib/submitters/serialize_for_webhook.rb | 4 +-- spec/requests/submissions_spec.rb | 2 ++ 10 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 db/migrate/20250912090605_add_template_variables.rb diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 32b51c17..193226df 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -184,6 +184,7 @@ module Api :send_email, :send_sms, :bcc_completed, :completed_redirect_url, :reply_to, :go_to_last, :require_phone_2fa, :expire_at, :name, { + variables: {}, message: %i[subject body], submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role, :completed, :phone, :application_key, :external_id, :reply_to, :go_to_last, diff --git a/app/models/submission.rb b/app/models/submission.rb index 351bcfa5..04a7ad85 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -15,6 +15,8 @@ # template_fields :text # template_schema :text # template_submitters :text +# variables :text +# variables_schema :text # created_at :datetime not null # updated_at :datetime not null # account_id :bigint not null @@ -50,6 +52,8 @@ class Submission < ApplicationRecord serialize :template_fields, coder: JSON serialize :template_schema, coder: JSON serialize :template_submitters, coder: JSON + serialize :variables_schema, coder: JSON + serialize :variables, coder: JSON serialize :preferences, coder: JSON attribute :source, :string, default: 'link' diff --git a/app/models/template.rb b/app/models/template.rb index a03bd5bc..c21e7a42 100644 --- a/app/models/template.rb +++ b/app/models/template.rb @@ -4,22 +4,23 @@ # # Table name: templates # -# id :bigint not null, primary key -# archived_at :datetime -# fields :text not null -# name :string not null -# preferences :text not null -# schema :text not null -# shared_link :boolean default(FALSE), not null -# slug :string not null -# source :text not null -# submitters :text not null -# created_at :datetime not null -# updated_at :datetime not null -# account_id :bigint not null -# author_id :bigint not null -# external_id :string -# folder_id :bigint not null +# id :bigint not null, primary key +# archived_at :datetime +# fields :text not null +# name :string not null +# preferences :text not null +# schema :text not null +# shared_link :boolean default(FALSE), not null +# slug :string not null +# source :text not null +# submitters :text not null +# variables_schema :text +# created_at :datetime not null +# updated_at :datetime not null +# account_id :bigint not null +# author_id :bigint not null +# external_id :string +# folder_id :bigint not null # # Indexes # @@ -57,6 +58,7 @@ class Template < ApplicationRecord serialize :preferences, coder: JSON serialize :fields, coder: JSON + serialize :variables_schema, coder: JSON serialize :schema, coder: JSON serialize :submitters, coder: JSON diff --git a/db/migrate/20250912090605_add_template_variables.rb b/db/migrate/20250912090605_add_template_variables.rb new file mode 100644 index 00000000..346762cd --- /dev/null +++ b/db/migrate/20250912090605_add_template_variables.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddTemplateVariables < ActiveRecord::Migration[8.0] + def change + add_column :templates, :variables_schema, :text + add_column :submissions, :variables_schema, :text + add_column :submissions, :variables, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index 9b5ee95b..6f4e7406 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[8.0].define(version: 2025_09_01_110606) do +ActiveRecord::Schema[8.0].define(version: 2025_09_12_090605) do # These are extensions that must be enabled in order to support this database enable_extension "btree_gin" enable_extension "plpgsql" @@ -305,6 +305,8 @@ ActiveRecord::Schema[8.0].define(version: 2025_09_01_110606) do t.bigint "account_id", null: false t.datetime "expire_at" t.text "name" + t.text "variables_schema" + t.text "variables" t.index ["account_id", "id"], name: "index_submissions_on_account_id_and_id" t.index ["account_id", "template_id", "id"], name: "index_submissions_on_account_id_and_template_id_and_id", where: "(archived_at IS NULL)" t.index ["account_id", "template_id", "id"], name: "index_submissions_on_account_id_and_template_id_and_id_archived", where: "(archived_at IS NOT NULL)" @@ -389,6 +391,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_09_01_110606) do t.string "external_id" t.text "preferences", null: false t.boolean "shared_link", default: false, null: false + t.text "variables_schema" t.index ["account_id", "folder_id", "id"], name: "index_templates_on_account_id_and_folder_id_and_id", where: "(archived_at IS NULL)" t.index ["account_id", "id"], name: "index_templates_on_account_id_and_id_archived", where: "(archived_at IS NOT NULL)" t.index ["account_id"], name: "index_templates_on_account_id" diff --git a/lib/submissions.rb b/lib/submissions.rb index f2afe428..c76d284d 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -70,6 +70,7 @@ module Submissions def update_template_fields!(submission) submission.template_fields = submission.template.fields + submission.variables_schema = submission.template.variables_schema submission.template_schema = submission.template.schema submission.template_submitters = submission.template.submitters if submission.template_submitters.blank? diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index acb75349..6d5e78c9 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -22,6 +22,7 @@ module Submissions account_id: user.account_id, preferences: set_submission_preferences, name: with_template ? attrs[:name] : (attrs[:name] || template.name), + variables: attrs[:variables] || {}, expire_at:, template_submitters: [], submitters_order:) @@ -139,8 +140,9 @@ module Submissions end if template_fields != (submission.template_fields || submission.template.fields) || - submitters_attrs.any? { |e| e[:completed].present? } || !with_template + submitters_attrs.any? { |e| e[:completed].present? } || !with_template || submission.variables.present? submission.template_fields = template_fields + submission.variables_schema = submission.template.variables_schema if submission.variables_schema.blank? submission.template_schema = submission.template.schema if submission.template_schema.blank? end diff --git a/lib/submissions/serialize_for_api.rb b/lib/submissions/serialize_for_api.rb index 616803cf..d06bbb42 100644 --- a/lib/submissions/serialize_for_api.rb +++ b/lib/submissions/serialize_for_api.rb @@ -25,6 +25,7 @@ module Submissions json = submission.as_json(SERIALIZE_PARAMS) + json['variables'] = (submission.variables || {}).as_json json['created_by_user'] ||= nil if with_events diff --git a/lib/submitters/serialize_for_webhook.rb b/lib/submitters/serialize_for_webhook.rb index 0f9cb4a2..3d987d5a 100644 --- a/lib/submitters/serialize_for_webhook.rb +++ b/lib/submitters/serialize_for_webhook.rb @@ -35,8 +35,7 @@ module Submitters 'audit_log_url' => submitter.submission.audit_log_url(expires_at:), 'submission_url' => r.submissions_preview_url(submission.slug, **Docuseal.default_url_options), 'template' => submission.template.as_json( - only: %i[id name external_id created_at updated_at], - methods: %i[folder_name] + only: %i[id name external_id created_at updated_at], methods: %i[folder_name] ), 'submission' => { 'id' => submission.id, @@ -44,6 +43,7 @@ module Submitters 'combined_document_url' => submission.combined_document_url(expires_at:), 'status' => build_submission_status(submission), 'url' => r.submissions_preview_url(submission.slug, **Docuseal.default_url_options), + 'variables' => (submission.variables || {}).as_json, 'created_at' => submission.created_at.as_json }) end diff --git a/spec/requests/submissions_spec.rb b/spec/requests/submissions_spec.rb index 468b5715..82698613 100644 --- a/spec/requests/submissions_spec.rb +++ b/spec/requests/submissions_spec.rb @@ -298,6 +298,7 @@ describe 'Submission API' do completed_at: nil, created_at: submission.created_at, updated_at: submission.updated_at, + variables: {}, archived_at: nil, status: 'pending', submitters:, @@ -358,6 +359,7 @@ describe 'Submission API' do completed_at: nil, created_at: submission.created_at, updated_at: submission.updated_at, + variables: {}, archived_at: nil, submitters:, template: {