summaryrefslogtreecommitdiff
path: root/app/finders/milestones_finder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/milestones_finder.rb')
-rw-r--r--app/finders/milestones_finder.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/app/finders/milestones_finder.rb b/app/finders/milestones_finder.rb
new file mode 100644
index 00000000000..7f18e889ad3
--- /dev/null
+++ b/app/finders/milestones_finder.rb
@@ -0,0 +1,29 @@
+# Searchs for group milestones and project milestones.
+#
+# Parameters
+# projects: array of projects or single project
+# groups: array of groups or single group
+# params: Search params
+
+class MilestonesFinder
+ attr_reader :projects, :groups, :params
+
+ def initialize(projects: nil, groups: nil, params: {})
+ @projects = Array(projects)
+ @groups = Array(groups)
+ @params = params
+ end
+
+ def execute
+ conditions = []
+ table = Milestone.arel_table
+ project_ids = projects&.map(&:id)
+ group_ids = groups&.map(&:id)
+
+ conditions << table[:group_id].in(group_ids) if group_ids
+ conditions << table[:project_id].in(project_ids) if project_ids
+
+ milestones = Milestone.where(conditions.reduce(:or)).reorder("due_date ASC")
+ Milestone.filter_by_state(milestones, params[:state])
+ end
+end