diff --git a/app/controllers/api/api_base_controller.rb b/app/controllers/api/api_base_controller.rb index 9ac7c748..267fd9bd 100644 --- a/app/controllers/api/api_base_controller.rb +++ b/app/controllers/api/api_base_controller.rb @@ -39,12 +39,17 @@ module Api private - def paginate(relation) - result = relation.order(id: :desc) + def paginate(relation, field: :id) + result = relation.order(field => :desc) .limit([params.fetch(:limit, DEFAULT_LIMIT).to_i, MAX_LIMIT].min) - result = result.where(id: ...params[:after].to_i) if params[:after].present? - result = result.where(id: (params[:before].to_i + 1)...) if params[:before].present? + if field == :id + result = result.where(id: ...params[:after].to_i) if params[:after].present? + result = result.where(id: (params[:before].to_i + 1)...) if params[:before].present? + else + result = result.where(field => ...params[:after]) if params[:after].present? + result = result.where(field => (params[:before] + 1)...) if params[:before].present? + end result end diff --git a/app/controllers/api/form_events_controller.rb b/app/controllers/api/form_events_controller.rb new file mode 100644 index 00000000..a6e5deaf --- /dev/null +++ b/app/controllers/api/form_events_controller.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module Api + class FormEventsController < ApiBaseController + load_and_authorize_resource :submitter, parent: false + + def index + submitters = @submitters.where.not(completed_at: nil) + + params[:after] = Time.zone.at(params[:after].to_i) if params[:after].present? + params[:before] = Time.zone.at(params[:before].to_i) if params[:before].present? + + submitters = paginate( + submitters.preload(template: :folder, submission: [:submitters, { audit_trail_attachment: :blob }], + documents_attachments: :blob, attachments_attachments: :blob), + field: :completed_at + ) + + render json: { + data: submitters.map do |s| + { + event_type: 'form.completed', + timestamp: s.completed_at, + data: Submitters::SerializeForWebhook.call(s) + } + end, + pagination: { + count: submitters.size, + next: submitters.last&.completed_at&.to_i, + prev: submitters.first&.completed_at&.to_i + } + } + end + end +end diff --git a/config/routes.rb b/config/routes.rb index 438bd16e..85fa2b5d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -45,6 +45,9 @@ Rails.application.routes.draw do resources :tools, only: %i[] do post :merge, on: :collection end + scope 'events' do + resources :form_events, only: %i[index], path: 'form/:type' + end end resources :verify_pdf_signature, only: %i[create]