diff options
Diffstat (limited to 'app/finders/milestones_finder.rb')
-rw-r--r-- | app/finders/milestones_finder.rb | 29 |
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 |