blob: bc29186445245cfb56da832adb9847e4434d3aab (
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# frozen_string_literal: true
class JobsWithArtifactsFinder
NUMBER_OF_JOBS_PER_PAGE = 30
def initialize(project:, params:)
@project = project
@params = params
end
def execute
jobs = jobs_with_size
jobs = filter_by_name(jobs)
jobs = filter_by_deleted_branches(jobs)
jobs = sorted(jobs)
jobs = paginated(jobs)
jobs
end
def total_size
job_ids = @project.builds.select(:id)
@project.builds.where(id: job_ids).sum(:artifacts_size) +
@project.job_artifacts.where(job_id: job_ids).sum(:size)
end
def sort_key
@params[:sort].presence || 'created_asc'
end
private
def filter_by_name(jobs)
return jobs if @params[:search].blank?
jobs.search(@params[:search])
end
def filter_by_deleted_branches(jobs)
deleted_branches = @params[:'deleted_branches_deleted-branches']
return jobs if deleted_branches.blank?
deleted_branches = ActiveModel::Type::Boolean.new.cast(deleted_branches)
if deleted_branches
jobs.where.not(ref: @project.repository.ref_names)
else
jobs.where(ref: @project.repository.ref_names)
end
end
def sorted(jobs)
jobs.order_by(sort_key)
end
def paginated(jobs)
jobs.page(@params[:page]).per(NUMBER_OF_JOBS_PER_PAGE).without_count
end
def jobs_with_size
@project.builds.with_sum_artifacts_size
end
end
|