Merge pull request #8882 from okriuchykhin/ok_SCI_12350_v4

Fix parameter passing from search controller to models [SCI-12350]
This commit is contained in:
Alex Kriuchykhin 2025-09-18 10:23:11 +02:00 committed by GitHub
commit ffe09576b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 38 additions and 56 deletions

View file

@ -115,7 +115,7 @@ class SearchController < ApplicationController
query = (params.fetch(:q) { '' }).strip
@filters = params[:filters]
@include_archived = @filters.blank? || @filters[:include_archived] == 'true'
@teams = (@filters.present? && @filters[:teams]&.values) || current_user.teams
@teams = @filters.present? && @filters[:teams]&.values ? current_user.teams.where(id: @filters[:teams].values) : current_user.teams
@display_query = query
splited_query = query.split
@ -142,10 +142,8 @@ class SearchController < ApplicationController
@records = @model.search(current_user,
@include_archived,
@search_query,
nil,
teams: @teams,
users: @users,
options: options)
@teams,
options)
.select("COUNT(\"#{@model.table_name}\".\"id\") OVER() AS filtered_count")
.select("\"#{@model.table_name}\".*")

View file

@ -59,19 +59,16 @@ class Asset < ApplicationRecord
user,
include_archived,
query = nil,
current_team = nil,
options = {}
teams = user.teams,
_options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
assets_in_steps = Asset.joins(:step)
.where(steps: { protocol: Protocol.search(user, include_archived, nil, teams) })
.pluck(:id)
.select(:id)
assets_in_results = Asset.joins(:result)
.where(results: { id: Result.search(user, include_archived, nil, teams) })
.pluck(:id)
.select(:id)
assets_in_inventories = Asset.joins(repository_cell: { repository_column: :repository })
.where(repositories: {
@ -79,7 +76,7 @@ class Asset < ApplicationRecord
team_id: teams
})
.where.not(repositories: { type: 'RepositorySnapshot' })
.pluck(:id)
.select(:id)
assets = distinct.where('assets.id IN (?) OR assets.id IN (?) OR assets.id IN (?)',
assets_in_steps, assets_in_results, assets_in_inventories)
@ -87,7 +84,7 @@ class Asset < ApplicationRecord
Asset.left_outer_joins(:asset_text_datum)
.joins(file_attachment: :blob)
.from(assets, 'assets')
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
end
def blob

View file

@ -39,7 +39,7 @@ module SearchableByNameModel
def self.search_by_search_fields_with_boolean(user, teams = [], query = nil, search_fields = [], options = {})
readable_by_user(user, teams)
.where_attributes_like_boolean(search_fields, query, options)
.where_attributes_like_boolean(search_fields, query)
.limit(options[:limit] || Constants::SEARCH_LIMIT)
end
end

View file

@ -108,7 +108,7 @@ module SearchableModel
end
}
scope :where_attributes_like_boolean, lambda { |attributes, query, options = {}|
scope :where_attributes_like_boolean, lambda { |attributes, query|
return unless query
query_clauses = []

View file

@ -67,13 +67,11 @@ class Experiment < ApplicationRecord
user,
include_archived,
query = nil,
current_team = nil,
options = {}
teams = user.teams,
_options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
new_query = distinct.readable_by_user(user, teams)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
new_query = new_query.joins(:project).active.where(projects: { archived: false }) unless include_archived

View file

@ -34,12 +34,11 @@ class LabelTemplate < ApplicationRecord
user,
_include_archived,
query = nil,
current_team = nil,
options = {}
teams = user.teams,
_options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
distinct.readable_by_user(user, teams)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
end
def icon

View file

@ -111,14 +111,12 @@ class MyModule < ApplicationRecord
user,
include_archived,
query = nil,
current_team = nil,
options = {}
teams = user.teams,
_options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
new_query = distinct.left_joins(:task_comments, my_module_tags: :tag, user_my_modules: :user)
.readable_by_user(user, teams)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
unless include_archived
new_query = new_query.joins(experiment: :project)

View file

@ -76,13 +76,12 @@ class Project < ApplicationRecord
user,
include_archived,
query = nil,
current_team = nil,
options = {}
teams = user.teams,
_options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
new_query = distinct.readable_by_user(user, teams)
.left_joins(:project_comments)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
new_query = new_query.active unless include_archived

View file

@ -40,11 +40,9 @@ class ProjectFolder < ApplicationRecord
.where(team: teams)
end
def self.search(user, include_archived, query = nil, current_team = nil, options = {})
teams = options[:teams] || current_team || user.teams.select(:id)
def self.search(user, include_archived, query = nil, teams = user.teams, _options = {})
new_query = distinct.readable_by_user(user, teams)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
new_query = new_query.active unless include_archived
new_query

View file

@ -143,11 +143,11 @@ class Protocol < ApplicationRecord
def self.search(user,
include_archived,
query = nil,
current_team = nil,
teams = user.teams,
options = {})
team_ids = options[:teams]&.pluck(:id) || current_team&.id || user.teams.pluck(:id)
team_ids = teams.is_a?(ActiveRecord::Relation) ? teams.pluck(:id) : teams.id
if options[:options]&.dig(:in_repository)
if options[:in_repository]
protocols = latest_available_versions(team_ids).readable_by_user(user, team_ids)
protocols = protocols.active unless include_archived
else
@ -185,7 +185,7 @@ class Protocol < ApplicationRecord
protocol_my_modules = joins(:my_module).where(my_modules: { id: MyModule.readable_by_user(user, teams) })
where('protocols.id IN ((?) UNION (?))', protocol_templates.select(:id), protocol_my_modules.select(:id))
.where_attributes_like_boolean(search_fields, query, options)
.where_attributes_like_boolean(search_fields, query)
.limit(options[:limit] || Constants::SEARCH_LIMIT)
end

View file

@ -70,13 +70,12 @@ class Report < ApplicationRecord
user,
_include_archived,
query = nil,
current_team = nil,
options = {}
)
teams = options[:teams] || current_team || user.teams.select(:id)
teams = user.teams,
_options = {}
)
distinct.with_granted_permissions(user, ReportPermissions::READ)
.where(team: teams)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
end
def self.readable_by_user(user, teams)

View file

@ -163,13 +163,11 @@ class RepositoryRow < ApplicationRecord
def self.search(user,
include_archived,
query = nil,
current_team = nil,
options = {})
teams = options[:teams] || current_team || user.teams.select(:id)
teams = user.teams,
_options = {})
repository_rows = joins(:repository, :created_by).readable_by_user(user, teams)
repository_rows = repository_rows.active unless include_archived
repository_rows.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
repository_rows.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
end
def self.where_children_attributes_like(query)

View file

@ -46,10 +46,8 @@ class Result < ApplicationRecord
def self.search(user,
include_archived,
query = nil,
current_team = nil,
options = {})
teams = options[:teams] || current_team || user.teams.select(:id)
teams = user.teams,
_options = {})
new_query = joins(:my_module)
.where(
my_modules: {