diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 9d9cfef8..3f69d705 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -106,7 +106,7 @@ module Api def submissions_params params.permit(submission: [{ - submitters: [[:uuid, :name, :email, :role, :completed, :phone, + submitters: [[:uuid, :name, :email, :role, :completed, :phone, :application_key, { values: {}, readonly_fields: [], fields: [%i[name default_value readonly validation_pattern invalid_message]] }]] }]) diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index 03a21fdd..a0abb9c8 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -4,6 +4,27 @@ module Api class SubmittersController < ApiBaseController load_and_authorize_resource :submitter + def index + submitters = Submitters.search(@submitters, params[:q]) + + submitters = submitters.where(application_key: params[:application_key]) if params[:application_key].present? + submitters = submitters.where(submission_id: params[:submission_id]) if params[:submission_id].present? + + submitters = paginate( + submitters.preload(:template, :submission, :submission_events, + documents_attachments: :blob, attachments_attachments: :blob) + ) + + render json: { + data: submitters.map { |s| Submitters::SerializeForApi.call(s, with_template: true, with_events: true) }, + pagination: { + count: submitters.size, + next: submitters.last&.id, + prev: submitters.first&.id + } + } + end + def show Submissions::EnsureResultGenerated.call(@submitter) if @submitter.completed_at? diff --git a/app/models/submitter.rb b/app/models/submitter.rb index b5e55d0b..c6ba2f71 100644 --- a/app/models/submitter.rb +++ b/app/models/submitter.rb @@ -4,21 +4,22 @@ # # Table name: submitters # -# id :bigint not null, primary key -# completed_at :datetime -# email :string -# ip :string -# name :string -# opened_at :datetime -# phone :string -# sent_at :datetime -# slug :string not null -# ua :string -# uuid :string not null -# values :text not null -# created_at :datetime not null -# updated_at :datetime not null -# submission_id :bigint not null +# id :bigint not null, primary key +# application_key :string +# completed_at :datetime +# email :string +# ip :string +# name :string +# opened_at :datetime +# phone :string +# sent_at :datetime +# slug :string not null +# ua :string +# uuid :string not null +# values :text not null +# created_at :datetime not null +# updated_at :datetime not null +# submission_id :bigint not null # # Indexes # diff --git a/config/routes.rb b/config/routes.rb index 96dd15f8..66ea84f3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -35,7 +35,7 @@ Rails.application.routes.draw do resources :template_folders_autocomplete, only: %i[index] resources :submitter_email_clicks, only: %i[create] resources :submitter_form_views, only: %i[create] - resources :submitters, only: %i[show] + resources :submitters, only: %i[index show] resources :submissions, only: %i[index show create destroy] do collection do resources :emails, only: %i[create], controller: 'submissions', as: :submissions_emails diff --git a/db/migrate/20231017213639_add_application_id_to_submitters.rb b/db/migrate/20231017213639_add_application_id_to_submitters.rb new file mode 100644 index 00000000..245c97ee --- /dev/null +++ b/db/migrate/20231017213639_add_application_id_to_submitters.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddApplicationIdToSubmitters < ActiveRecord::Migration[7.0] + def change + add_column :submitters, :application_key, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 88c04854..2b5ac2ee 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.0].define(version: 2023_10_07_052818) do +ActiveRecord::Schema[7.0].define(version: 2023_10_17_213639) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -133,6 +133,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_052818) do t.datetime "updated_at", null: false t.string "name" t.string "phone" + t.string "application_key" 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/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index 6f1770f3..1edbd631 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -92,6 +92,7 @@ module Submissions email:, phone: attrs[:phone].to_s.gsub(/[^0-9+]/, ''), name: attrs[:name], + application_key: attrs[:application_key], completed_at: attrs[:completed] ? Time.current : nil, sent_at: mark_as_sent && email.present? && is_order_sent ? Time.current : nil, values: attrs[:values] || {}, diff --git a/lib/submitters/serialize_for_api.rb b/lib/submitters/serialize_for_api.rb index d8566854..8c486f43 100644 --- a/lib/submitters/serialize_for_api.rb +++ b/lib/submitters/serialize_for_api.rb @@ -18,7 +18,7 @@ module Submitters serialize_params = { include: {}, - only: %i[id slug uuid name email phone completed_at + only: %i[id slug uuid name email phone completed_at application_key opened_at sent_at created_at updated_at] }