summaryrefslogtreecommitdiff
path: root/app/finders/concerns/merged_at_filter.rb
blob: d2858ba2f88af24aed2b123df5d45d4824a87890 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# frozen_string_literal: true

module MergedAtFilter
  private

  # rubocop: disable CodeReuse/ActiveRecord
  def by_merged_at(items)
    return items unless merged_after || merged_before

    mr_metrics_scope = MergeRequest::Metrics
    mr_metrics_scope = mr_metrics_scope.merged_after(merged_after) if merged_after.present?
    mr_metrics_scope = mr_metrics_scope.merged_before(merged_before) if merged_before.present?

    scope = items.joins(:metrics).merge(mr_metrics_scope)
    scope = target_project_id_filter_on_metrics(scope) if Feature.enabled?(:improved_mr_merged_at_queries)
    scope
  end
  # rubocop: enable CodeReuse/ActiveRecord

  def merged_after
    params[:merged_after]
  end

  def merged_before
    params[:merged_before]
  end

  # rubocop: disable CodeReuse/ActiveRecord
  def target_project_id_filter_on_metrics(scope)
    scope.where(MergeRequest.arel_table[:target_project_id].eq(MergeRequest::Metrics.arel_table[:target_project_id]))
  end
  # rubocop: enable CodeReuse/ActiveRecord
end