gitlab-org--gitlab-foss/app/finders
Yorick Peterse 6ef87a2083
Merge issuable "reopened" state into "opened"
Having two states that essentially mean the same thing is very much like
having a boolean "true" and boolean "mostly-true": it's rather silly.
This commit merges the "reopened" state into the "opened" state while
taking care of system notes still showing messages along the lines of
"Alice reopened this issue".

A big benefit from having only two states (opened and closed) is that
indexing and querying becomes simpler and more performant. For example,
to get all the opened queries we no longer have to query both states:

    SELECT *
    FROM issues
    WHERE project_id = 2
    AND state IN ('opened', 'reopened');

Instead we can query a single state directly, which can be much faster:

    SELECT *
    FROM issues
    WHERE project_id = 2
    AND state = 'opened';

Further, only having two states makes indexing easier as we will only
ever filter (and thus scan an index) using a single value. Partial
indexes could help but aren't supported on MySQL, complicating the
development process and not being helpful for MySQL.
2017-07-28 13:31:51 +02:00
..
admin Decrease ABC threshold to 56.96 2017-07-24 10:54:16 +00:00
concerns move CreatedAtFilter to concerns folder 2017-07-07 19:01:49 +02:00
README.md Set milestone on new issue when creating issue from index with milestone filter active. 2015-05-27 14:22:11 +02:00
access_requests_finder.rb Use Ability.allowed? instead of current_user.can? in AccessRequestsFinder 2016-09-28 08:46:59 +02:00
branches_finder.rb implements the basic filter functionality 2016-07-19 19:30:10 +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 Enable Style/DotPosition Rubocop 👮 2017-06-21 13:48:12 +00: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 Refactor GroupProjectsFinder#init_collection 2017-06-19 19:11:35 +02:00
groups_finder.rb Make the GroupFinder specs more strict 2017-06-15 08:46:34 +02:00
issuable_finder.rb Merge issuable "reopened" state into "opened" 2017-07-28 13:31:51 +02:00
issues_finder.rb Clear issuable counter caches on update 2017-07-19 10:21:20 +01:00
joined_groups_finder.rb Address feedback 2016-03-22 00:09:20 +01:00
labels_finder.rb Hide archived project labels from group issue tracker 2017-06-30 16:22:00 -03:00
members_finder.rb Show members of parent groups on project members page 2017-03-09 10:23:57 +02:00
merge_requests_finder.rb Add top-level /merge_requests API endpoint 2017-07-27 23:34:57 +02:00
milestones_finder.rb fix milestones finder failing spec 2017-07-07 19:21:00 -03:00
move_to_project_finder.rb Move to project dropdown with infinite scroll for better performance 2016-08-18 15:31:51 +02:00
notes_finder.rb Merge branch 'snippets-finder-visibility' into 'security' 2017-05-10 16:48:18 +02:00
personal_access_tokens_finder.rb apply codestyle and implementation changes to the respective feature code 2017-03-06 19:18:26 +00:00
personal_projects_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01: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 constant as ALLOWED_INDEXED_COLUMNS 2017-05-03 02:11:51 +09:00
projects_finder.rb Add user projects API 2017-07-06 08:04:54 +03:00
snippets_finder.rb Merge branch 'snippets-finder-visibility' into 'security' 2017-05-10 16:48:18 +02:00
tags_finder.rb add specs for tags finder 2016-08-31 19:16:47 +01:00
todos_finder.rb Removes redundant pending delete checks 2017-06-28 17:51:05 +01:00
union_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
users_finder.rb refactor created at filter to use model scopes 2017-07-07 18:31:50 +02:00

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.