Read about our upcoming Code of Conduct on this issue

projects_finder.rb 1.7 KB
Newer Older
Maxim Rydkin's avatar
Maxim Rydkin committed
1
class Admin::ProjectsFinder
2
  attr_reader :params, :current_user
Maxim Rydkin's avatar
Maxim Rydkin committed
3
4

  def initialize(params:, current_user:)
5
    @params = params
Maxim Rydkin's avatar
Maxim Rydkin committed
6
7
8
9
    @current_user = current_user
  end

  def execute
10
    items = Project.without_deleted.with_statistics
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    items = by_namespace_id(items)
    items = by_visibilty_level(items)
    items = by_with_push(items)
    items = by_abandoned(items)
    items = by_last_repository_check_failed(items)
    items = by_archived(items)
    items = by_personal(items)
    items = by_name(items)
    items = sort(items)
    items.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page])
  end

  private

  def by_namespace_id(items)
    params[:namespace_id].present? ? items.in_namespace(params[:namespace_id]) : items
  end

  def by_visibilty_level(items)
    params[:visibility_level].present? ? items.where(visibility_level: params[:visibility_level]) : items
  end

  def by_with_push(items)
    params[:with_push].present? ? items.with_push : items
  end

  def by_abandoned(items)
    params[:abandoned].present? ? items.abandoned : items
  end

  def by_last_repository_check_failed(items)
    params[:last_repository_check_failed].present? ? items.where(last_repository_check_failed: true) : items
  end

  def by_archived(items)
46
47
48
49
50
51
52
    if params[:archived] == 'only'
      items.archived
    elsif params[:archived].blank?
      items.non_archived
    else
      items
    end
53
54
55
56
57
58
59
60
61
62
63
64
65
  end

  def by_personal(items)
    params[:personal].present? ? items.personal(current_user) : items
  end

  def by_name(items)
    params[:name].present? ? items.search(params[:name]) : items
  end

  def sort(items)
    sort = params.fetch(:sort) { 'latest_activity_desc' }
    items.sort(sort)
Maxim Rydkin's avatar
Maxim Rydkin committed
66
67
  end
end