gitlab-org--gitlab-foss/app/finders
Sean McGivern 750b2ff0ee Make upcoming milestone work across projects
Before: we took the next milestone due across all projects in the
search and found issues whose milestone title matched that
one. Problems:

1. The milestone could be closed.
2. Different projects have milestones with different schedules.
3. Different projects have milestones with different titles.
4. Different projects can have milestones with different schedules, but
   the _same_ title. That means we could show issues from a past
   milestone, or one that's far in the future.

After: gather the ID of the next milestone on each project we're looking
at, and find issues with those milestone IDs. Problems:

1. For a lot of projects, this can return a lot of IDs.
2. The SQL query has to be different between Postgres and MySQL, because
   MySQL is much more lenient with HAVING: as well as the columns
   appearing in GROUP BY or in aggregate clauses, MySQL allows them to
   appear in the SELECT list (un-aggregated).
2016-05-16 10:25:24 +01:00
..
contributed_projects_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
group_projects_finder.rb Add specs and add visibility level to admin groups 2016-03-21 19:11:24 -03:00
groups_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
issuable_finder.rb Make upcoming milestone work across projects 2016-05-16 10:25:24 +01:00
issues_finder.rb Restrict access to confidential issues 2016-03-17 20:55:38 -03:00
joined_groups_finder.rb Address feedback 2016-03-22 00:09:20 +01:00
merge_requests_finder.rb Refactor finders. Prevent circular dependency error 2014-09-02 15:28:27 +03:00
milestones_finder.rb sort milestones by due_date 2015-12-03 08:53:34 -06:00
notes_finder.rb Extract LegacyDiffNote out of Note 2016-05-13 17:31:43 -05:00
personal_projects_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01:00
projects_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01: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
snippets_finder.rb Prevent private snippets in public/internal projects from being leaked via API 2016-04-25 12:02:06 -07:00
todos_finder.rb Rename Tasks to Todos 2016-02-20 12:39:27 -02:00
trending_projects_finder.rb Revamp trending projects query 2015-10-06 17:26:32 +02:00
union_finder.rb Tweaks, refactoring, and specs 2016-03-20 21:04:07 +01: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.