Fix fetching assigned repository rows when using filter & refactor it

This commit is contained in:
Matej Zrimšek 2019-02-28 20:39:10 +01:00 committed by mz3944
parent c2e1e85913
commit 632835cf30

View file

@ -25,39 +25,42 @@ class RepositoryDatatableService
end end
def process_query def process_query
order_obj = build_conditions(@params)[:order_by_column]
search_value = build_conditions(@params)[:search_value] search_value = build_conditions(@params)[:search_value]
records = search_value.present? ? search(search_value) : fetch_records order_obj = build_conditions(@params)[:order_by_column]
@repository_rows = sort_rows(order_obj, records)
end
def fetch_records repository_rows = fetch_rows(search_value)
repository_rows = RepositoryRow.joins(:created_by) assigned_rows = repository_rows.joins(:my_module_repository_rows)
.where(repository: @repository)
if @my_module if @my_module
@assigned_rows = @my_module.repository_rows assigned_rows = assigned_rows
.joins(:created_by) .where(my_module_repository_rows: {
.where(repository: @repository) my_module_id: @my_module
return @assigned_rows if @params[:assigned] == 'assigned' })
else repository_rows = assigned_rows if @params[:assigned] == 'assigned'
@assigned_rows = repository_rows.joins(:my_module_repository_rows)
end end
repository_rows
@assigned_rows = assigned_rows
@repository_rows = sort_rows(order_obj, repository_rows)
end end
def search(value) def fetch_rows(search_value)
includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES } repository_rows = @repository.repository_rows
searchable_attributes = ['repository_rows.name', .left_outer_joins(:created_by)
'users.full_name',
'repository_rows.id'] + if search_value.present?
Extends::REPOSITORY_EXTRA_SEARCH_ATTR includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES }
ids = @repository.repository_rows searchable_attributes = ['repository_rows.name',
.left_outer_joins(:created_by) 'users.full_name',
.left_outer_joins(includes_json) 'repository_rows.id'] +
.where_attributes_like(searchable_attributes, value) Extends::REPOSITORY_EXTRA_SEARCH_ATTR
.pluck(:id)
# using distinct raises an error when combined with sort repository_rows = repository_rows
RepositoryRow.where(id: ids.uniq) .left_outer_joins(includes_json)
.where_attributes_like(searchable_attributes,
search_value)
.distinct
end
repository_rows
end end
def build_conditions(params) def build_conditions(params)