From 8630c68631074deccbf720714c1e31ef6eab12c2 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Sat, 3 Feb 2024 14:39:28 +0200 Subject: [PATCH] add account_id to submissions --- app/controllers/start_form_controller.rb | 4 ++- app/models/submission.rb | 4 ++- app/models/submitter.rb | 2 +- ...203113454_add_account_id_to_submissions.rb | 26 +++++++++++++++++++ db/schema.rb | 4 ++- lib/ability.rb | 4 +-- lib/submissions.rb | 1 + lib/submissions/create_from_submitters.rb | 1 + spec/factories/submissions.rb | 1 + 9 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20240203113454_add_account_id_to_submissions.rb diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index 1298f866..15a18df6 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -10,7 +10,8 @@ class StartFormController < ApplicationController before_action :load_template def show - @submitter = @template.submissions.new.submitters.new(uuid: @template.submitters.first['uuid']) + @submitter = @template.submissions.new(account_id: @template.account_id) + .submitters.new(uuid: @template.submitters.first['uuid']) end def update @@ -68,6 +69,7 @@ class StartFormController < ApplicationController end submitter.submission ||= Submission.new(template:, + account_id: template.account_id, template_submitters: template.submitters, source: :link) diff --git a/app/models/submission.rb b/app/models/submission.rb index fe8a78aa..42d1ae0b 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -15,11 +15,13 @@ # template_submitters :text # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint not null # created_by_user_id :bigint # template_id :bigint not null # # Indexes # +# index_submissions_on_account_id (account_id) # index_submissions_on_created_by_user_id (created_by_user_id) # index_submissions_on_slug (slug) UNIQUE # index_submissions_on_template_id (template_id) @@ -31,7 +33,7 @@ # class Submission < ApplicationRecord belongs_to :template - has_one :account, through: :template + belongs_to :account belongs_to :created_by_user, class_name: 'User', optional: true has_many :submitters, dependent: :destroy diff --git a/app/models/submitter.rb b/app/models/submitter.rb index 382aca24..14f98c87 100644 --- a/app/models/submitter.rb +++ b/app/models/submitter.rb @@ -36,7 +36,7 @@ class Submitter < ApplicationRecord belongs_to :submission has_one :template, through: :submission - has_one :account, through: :template + has_one :account, through: :submission attribute :values, :string, default: -> { {} } attribute :preferences, :string, default: -> { {} } diff --git a/db/migrate/20240203113454_add_account_id_to_submissions.rb b/db/migrate/20240203113454_add_account_id_to_submissions.rb new file mode 100644 index 00000000..2c562d7a --- /dev/null +++ b/db/migrate/20240203113454_add_account_id_to_submissions.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class AddAccountIdToSubmissions < ActiveRecord::Migration[7.1] + class MigrationSubmission < ApplicationRecord + self.table_name = 'submissions' + end + + class MigrationTemplate < ApplicationRecord + self.table_name = 'templates' + end + + class MigrationAccount < ApplicationRecord + self.table_name = 'accounts' + end + + def change + add_reference :submissions, :account, index: true, null: true + + MigrationAccount.all.each do |account| + MigrationSubmission.where(template_id: MigrationTemplate.where(account_id: account.id).select(:id)) + .update_all(account_id: account.id) + end + + change_column_null :submissions, :account_id, false + end +end diff --git a/db/schema.rb b/db/schema.rb index 9f65c37b..735410e4 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_02_01_210319) do +ActiveRecord::Schema[7.1].define(version: 2024_02_03_113454) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -151,6 +151,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_01_210319) do t.string "submitters_order", null: false t.string "slug", null: false t.text "preferences", null: false + t.bigint "account_id", null: false + t.index ["account_id"], name: "index_submissions_on_account_id" t.index ["created_by_user_id"], name: "index_submissions_on_created_by_user_id" t.index ["slug"], name: "index_submissions_on_slug", unique: true t.index ["template_id"], name: "index_submissions_on_template_id" diff --git a/lib/ability.rb b/lib/ability.rb index 1d3f336b..abdcf2f9 100644 --- a/lib/ability.rb +++ b/lib/ability.rb @@ -6,8 +6,8 @@ class Ability def initialize(user) can :manage, Template, account_id: user.account_id can :manage, TemplateFolder, account_id: user.account_id - can :manage, Submission, template: { account_id: user.account_id } - can :manage, Submitter, template: { account_id: user.account_id } + can :manage, Submission, account_id: user.account_id + can :manage, Submitter, submission: { account_id: user.account_id } can :manage, User, account_id: user.account_id can :manage, EncryptedConfig, account_id: user.account_id can :manage, EncryptedUserConfig, user_id: user.id diff --git a/lib/submissions.rb b/lib/submissions.rb index e4630fa7..3a3e2071 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -32,6 +32,7 @@ module Submissions parse_emails(emails).uniq.map do |email| submission = template.submissions.new(created_by_user: user, + account_id: user.account_id, source:, template_submitters: template.submitters) diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index 9d282bd4..bc80f507 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -15,6 +15,7 @@ module Submissions set_submission_preferences['send_email'] = true if params['send_completed_email'] submission = template.submissions.new(created_by_user: user, source:, + account_id: user.account_id, preferences: set_submission_preferences, template_submitters: [], submitters_order:) diff --git a/spec/factories/submissions.rb b/spec/factories/submissions.rb index 83712e8e..3a210447 100644 --- a/spec/factories/submissions.rb +++ b/spec/factories/submissions.rb @@ -6,6 +6,7 @@ FactoryBot.define do created_by_user factory: %i[user] before(:create) do |submission, _| + submission.account_id = submission.template.account_id submission.template_fields = submission.template.fields submission.template_schema = submission.template.schema submission.template_submitters = submission.template.submitters