33 lines
1.4 KiB
Ruby
33 lines
1.4 KiB
Ruby
class Admin::ProjectsFinder
|
|
attr_reader :sort, :namespace_id, :visibility_level, :with_push,
|
|
:abandoned, :last_repository_check_failed, :archived,
|
|
:personal, :name, :page, :current_user
|
|
|
|
def initialize(params:, current_user:)
|
|
@current_user = current_user
|
|
@sort = params.fetch(:sort) { 'latest_activity_desc' }
|
|
@namespace_id = params[:namespace_id]
|
|
@visibility_level = params[:visibility_level]
|
|
@with_push = params[:with_push]
|
|
@abandoned = params[:abandoned]
|
|
@last_repository_check_failed = params[:last_repository_check_failed]
|
|
@archived = params[:archived]
|
|
@personal = params[:personal]
|
|
@name = params[:name]
|
|
@page = params[:page]
|
|
end
|
|
|
|
def execute
|
|
items = Project.with_statistics
|
|
items = items.in_namespace(namespace_id) if namespace_id.present?
|
|
items = items.where(visibility_level: visibility_level) if visibility_level.present?
|
|
items = items.with_push if with_push.present?
|
|
items = items.abandoned if abandoned.present?
|
|
items = items.where(last_repository_check_failed: true) if last_repository_check_failed.present?
|
|
items = items.non_archived unless archived.present?
|
|
items = items.personal(current_user) if personal.present?
|
|
items = items.search(name) if name.present?
|
|
items = items.sort(sort)
|
|
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(page)
|
|
end
|
|
end
|