Merge pull request #3785 from okriuchykhin/ok_SCI_6423

Fix filtering for repository snapshots [SCI-6423]
This commit is contained in:
Alex Kriuchykhin 2022-01-25 12:59:46 +01:00 committed by GitHub
commit e55c9ec1cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 12 deletions

View file

@ -266,7 +266,7 @@ class RepositoryDatatableService
operator: filter_element_params[:operator],
parameters: filter_element_params[:parameters]
)
config = Extends::REPOSITORY_EXTRA_SEARCH_ATTR[filter_element.repository_column.data_type.to_sym]
config = Extends::REPOSITORY_ADVANCED_SEARCH_ATTR[filter_element.repository_column.data_type.to_sym]
if %w(empty file_not_attached).include?(filter_element_params[:operator])
repository_rows.left_outer_joins(config[:includes]).where(config[:field] => nil)

View file

@ -13,14 +13,13 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
end
def process_query
search_value = build_conditions(@params)[:search_value]
order_obj = build_conditions(@params)[:order_by_column]
search_value = @params[:search][:value]
order_params = @params[:order].first
order_by_column = { column: order_params[:column].to_i, dir: order_params[:dir] }
repository_rows = fetch_rows(search_value)
repository_rows = fetch_rows(search_value).preload(Extends::REPOSITORY_ROWS_PRELOAD_RELATIONS)
repository_rows = repository_rows.preload(Extends::REPOSITORY_ROWS_PRELOAD_RELATIONS)
@repository_rows = sort_rows(order_obj, repository_rows)
sort_rows(order_by_column, repository_rows)
end
def fetch_rows(search_value)
@ -29,12 +28,8 @@ class RepositorySnapshotDatatableService < RepositoryDatatableService
@all_count = repository_rows.count
if search_value.present?
matched_by_user = repository_rows.joins(:created_by).where_attributes_like('users.full_name', search_value)
repository_row_matches = repository_rows
.where_attributes_like(['repository_rows.name', 'repository_rows.id'], search_value)
repository_row_matches = repository_rows.where_attributes_like(@repository.default_search_fileds, search_value)
results = repository_rows.where(id: repository_row_matches)
results = results.or(repository_rows.where(id: matched_by_user))
data_types = @repository.repository_columns.pluck(:data_type).uniq

View file

@ -70,6 +70,27 @@ class Extends
# Extra attributes used for search in repositories, 'filed_name' => include_hash
REPOSITORY_EXTRA_SEARCH_ATTR = {
RepositoryTextValue: {
field: 'repository_text_values.data', includes: :repository_text_values
}, RepositoryNumberValue: {
field: 'repository_number_values.data', includes: :repository_number_values
}, RepositoryListValue: {
field: 'repository_list_items.data',
includes: { repository_list_values: :repository_list_item }
}, RepositoryChecklistValue: {
field: 'repository_checklist_items.data',
includes: { repository_checklist_values: { repository_checklist_items_values: :repository_checklist_item } }
}, RepositoryStatusValue: {
field: 'repository_status_items.status',
includes: { repository_status_values: :repository_status_item }
}, RepositoryAssetValue: {
field: 'active_storage_blobs.filename',
includes: { repository_asset_values: { asset: { file_attachment: :blob } } }
}
}
# Extra attributes used for advanced search in repositories, 'filed_name' => include_hash
REPOSITORY_ADVANCED_SEARCH_ATTR = {
RepositoryTextValue: {
field: 'repository_text_values.data', includes: :repository_text_values
}, RepositoryNumberValue: {