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 [Rails5] Rename sort methods to sort_by_attribute 2018-04-04 09:19:47 +00:00
concerns Port read_cross_project ability from EE 2018-02-22 17:11:36 +01:00
access_requests_finder.rb Use Ability.allowed? instead of current_user.can? in AccessRequestsFinder 2016-09-28 08:46:59 +02:00
autocomplete_users_finder.rb Added changelog for user search improvements 2018-02-22 18:55:36 +01:00
branches_finder.rb Add overview of branches and a filter for active/stale branches 2018-03-06 21:28:14 +09:00
clusters_finder.rb Use attr_reader instead of instance variables 2017-11-28 14:39:18 +01:00
contributed_projects_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
environments_finder.rb Revert "Enable Style/DotPosition" 2017-02-23 09:33:19 -06:00
events_finder.rb Port read_cross_project ability from EE 2018-02-22 17:11:36 +01:00
fork_projects_finder.rb Introduce ForkProjectsFinder class 2017-09-20 08:27:16 +10:00
group_descendants_finder.rb Revert "Don't include projects shared as group-descendants" 2018-04-18 17:15:52 +02:00
group_finder.rb Merge branch 'jej-group-name-disclosure' into 'security' 2017-03-29 19:18:38 -07:00
group_members_finder.rb Enable Style/DotPosition Rubocop 👮 2017-06-21 13:48:12 +00:00
group_projects_finder.rb Reduce queries in GroupProjectsFinder 2018-05-28 13:52:37 +02:00
groups_finder.rb show only groups an admin is a member of in dashboards/grops 2018-05-01 09:24:21 +00:00
issuable_finder.rb Add created_by_me and assigned_to_me scopes 2018-05-21 09:55:30 +08:00
issues_finder.rb Add created_by_me and assigned_to_me scopes 2018-05-21 09:55:30 +08:00
joined_groups_finder.rb Address feedback 2016-03-22 00:09:20 +01:00
labels_finder.rb Allow assigning and filtering issuables by ancestor group labels 2018-04-04 15:40:29 +00:00
members_finder.rb More readable SQL query. 2018-02-21 13:54:35 +01:00
merge_request_target_project_finder.rb Prevent new merge requests for archived projects 2018-04-11 10:51:14 +02:00
merge_requests_finder.rb Add created_by_me and assigned_to_me scopes 2018-05-21 09:55:30 +08:00
milestones_finder.rb Port read_cross_project ability from EE 2018-02-22 17:11:36 +01:00
move_to_project_finder.rb Removes default scope from sortable 2017-09-07 13:01:59 +01:00
notes_finder.rb Use limited count queries also for scoped searches 2018-03-05 13:25:56 +00:00
personal_access_tokens_finder.rb Adds Rubocop rule for line break after guard clause 2017-11-16 17:58:29 +01:00
personal_projects_finder.rb Order UsersController#projects.json by updated_at 2018-05-19 07:19:58 +09:00
pipeline_schedules_finder.rb Add Pipeline Schedules that supersedes experimental Trigger Schedule 2017-05-07 22:35:56 +00:00
pipelines_finder.rb Add sha filter to list pipelines 2018-04-27 11:00:52 +01:00
projects_finder.rb [Rails5] Rename sort methods to sort_by_attribute 2018-04-04 09:19:47 +00:00
README.md
runner_jobs_finder.rb Refactorize jobs finding logic 2017-11-28 00:36:50 +01:00
snippets_finder.rb Extract method User#authorizations_for_projects. 2018-03-02 18:23:03 +01:00
tags_finder.rb add specs for tags finder 2016-08-31 19:16:47 +01:00
todos_finder.rb [Rails5] Rename sort methods to sort_by_attribute 2018-04-04 09:19:47 +00:00
union_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
user_recent_events_finder.rb Leverage user_contributed_projects to find recent events. 2018-03-07 14:36:25 +01:00
users_finder.rb Add 2FA filter to users API for admins only 2018-04-23 11:54:45 +03:00

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.