fulltext search

This commit is contained in:
Pete Matsyburka
2025-06-05 13:16:55 +03:00
parent 9d1860f038
commit 33811945be
36 changed files with 682 additions and 25 deletions
+39 -1
View File
@@ -7,7 +7,15 @@ module Submissions
module_function
def search(submissions, keyword, search_values: false, search_template: false)
def search(current_user, submissions, keyword, search_values: false, search_template: false)
if Docuseal.fulltext_search?(current_user)
fulltext_search(current_user, submissions, keyword, search_template:)
else
plain_search(submissions, keyword, search_values:, search_template:)
end
end
def plain_search(submissions, keyword, search_values: false, search_template: false)
return submissions if keyword.blank?
term = "%#{keyword.downcase}%"
@@ -29,6 +37,36 @@ module Submissions
submissions.joins(:submitters).where(arel).group(:id)
end
def fulltext_search(current_user, submissions, keyword, search_template: false)
return submissions if keyword.blank?
arel = SearchEntry.where(record_type: 'Submission')
.where(account_id: current_user.account_id)
.where(*SearchEntries.build_tsquery(keyword))
.select(:record_id).arel
if search_template
arel = Arel::Nodes::Union.new(
arel,
Submission.where(
template_id: SearchEntry.where(record_type: 'Template')
.where(account_id: current_user.account_id)
.where(*SearchEntries.build_tsquery(keyword))
.select(:record_id)
).select(:id).arel
)
end
arel = Arel::Nodes::Union.new(
arel, Submitter.joins(:search_entry)
.where(search_entry: { account_id: current_user.account_id })
.where(*SearchEntries.build_tsquery(keyword))
.select(:submission_id).arel
)
submissions.where(Submission.arel_table[:id].in(arel))
end
def update_template_fields!(submission)
submission.template_fields = submission.template.fields
submission.template_schema = submission.template.schema