gitlab-org--gitlab-foss/app/finders
Yorick Peterse 77d4546eda
Reduce queries in GroupProjectsFinder
GroupProjectsFinder#collection_with_user would run the following code:

    if group.users.include?(current_user)

When running this code for multiple groups this would result in one
query being executed for every group.

This commit simple removes the entire "if" statement with the code of
the "else" statement. This ensures both paths use the same code, and
removes the need for explicitly checking if a user is a member of the
group.
2018-05-28 13:52:37 +02:00
..
admin
concerns
README.md
access_requests_finder.rb
autocomplete_users_finder.rb
branches_finder.rb
clusters_finder.rb
contributed_projects_finder.rb
environments_finder.rb
events_finder.rb
fork_projects_finder.rb
group_descendants_finder.rb
group_finder.rb
group_members_finder.rb
group_projects_finder.rb Reduce queries in GroupProjectsFinder 2018-05-28 13:52:37 +02:00
groups_finder.rb
issuable_finder.rb
issues_finder.rb
joined_groups_finder.rb
labels_finder.rb
members_finder.rb
merge_request_target_project_finder.rb
merge_requests_finder.rb
milestones_finder.rb
move_to_project_finder.rb
notes_finder.rb
personal_access_tokens_finder.rb
personal_projects_finder.rb
pipeline_schedules_finder.rb
pipelines_finder.rb
projects_finder.rb
runner_jobs_finder.rb
snippets_finder.rb
tags_finder.rb
todos_finder.rb
union_finder.rb
user_recent_events_finder.rb
users_finder.rb

README.md

Finders

This type of classes responsible for collection items based on different conditions. To prevent lookup methods in models like this:

class Project
  def issues_for_user_filtered_by(user, filter)
    # A lot of logic not related to project model itself
  end
end

issues = project.issues_for_user_filtered_by(user, params)

Better use this:

issues = IssuesFinder.new(project, user, filter).execute

It will help keep models thiner.