2020-05-08 14:33:19 +08:00
class Issues :: ListQueryService < ApplicationService
2020-06-18 15:46:00 +08:00
attr_reader :all_issues , :params , :select_type
2020-05-08 14:33:19 +08:00
2020-06-18 15:46:00 +08:00
def initialize ( all_issues , params , select_type )
2020-05-08 14:33:19 +08:00
@all_issues = all_issues
@params = params
2020-06-18 15:46:00 +08:00
@select_type = select_type
2020-05-08 14:33:19 +08:00
end
def call
status_type = params [ :status_type ] . to_s #issue状态的选择
search_name = params [ :search ] . to_s
start_time = params [ :start_date ]
end_time = params [ :due_date ]
2020-05-08 14:48:53 +08:00
issues = all_issues . issue_index_includes
2020-05-08 15:05:53 +08:00
if status_type . to_s == " 2 " #表示关闭中的
2020-05-08 14:48:53 +08:00
issues = issues . where ( status_id : 5 )
2020-05-26 14:11:03 +08:00
elsif status_type . to_s == " 1 "
2020-06-18 15:46:00 +08:00
if ( select_type == " Issue " )
issues = issues . where . not ( status_id : 5 ) #默认显示开启中的
else
issues = issues . joins ( :pull_request ) . where ( pull_requests : { status : 0 } ) #默认显示开启中的
end
2020-06-12 18:22:42 +08:00
elsif status_type . to_s == " 11 " #表示pr的已关闭
issues = issues . joins ( :pull_request ) . where ( pull_requests : { status : 1 } )
2020-05-08 14:33:19 +08:00
end
if search_name . present?
2021-05-21 16:42:53 +08:00
issues = issues . where ( " subject LIKE ? OR description LIKE ? " , " % #{ search_name } % " , " % #{ search_name } % " )
2020-05-08 14:33:19 +08:00
end
if start_time & . present? || end_time & . present?
issues = issues . where ( " start_date between ? and ? " , start_time & . present? ? start_time . to_date : Time . now . to_date , end_time & . present? ? end_time . to_date : Time . now . to_date )
end
issues = issues . where ( author_id : params [ :author_id ] ) if params [ :author_id ] . present? && params [ :author_id ] . to_s != " all "
issues = issues . where ( assigned_to_id : params [ :assigned_to_id ] ) if params [ :assigned_to_id ] . present? && params [ :assigned_to_id ] . to_s != " all "
issues = issues . where ( tracker_id : params [ :tracker_id ] ) if params [ :tracker_id ] . present? && params [ :tracker_id ] . to_s != " all "
issues = issues . where ( status_id : params [ :status_id ] ) if params [ :status_id ] . present? && params [ :status_id ] . to_s != " all "
issues = issues . where ( priority_id : params [ :priority_id ] ) if params [ :priority_id ] . present? && params [ :priority_id ] . to_s != " all "
issues = issues . where ( fixed_version_id : params [ :fixed_version_id ] ) if params [ :fixed_version_id ] . present? && params [ :fixed_version_id ] . to_s != " all "
issues = issues . where ( done_ratio : params [ :done_ratio ] . to_i ) if params [ :done_ratio ] . present? && params [ :done_ratio ] . to_s != " all "
issues = issues . where ( issue_type : params [ :issue_type ] . to_s ) if params [ :issue_type ] . present? && params [ :issue_type ] . to_s != " all "
issues = issues . joins ( :issue_tags ) . where ( issue_tags : { id : params [ :issue_tag_id ] . to_i } ) if params [ :issue_tag_id ] . present? && params [ :issue_tag_id ] . to_s != " all "
2020-05-08 15:29:01 +08:00
issues . reorder ( " issues. #{ order_name } #{ order_type } " )
2020-05-08 14:33:19 +08:00
end
2021-06-17 16:13:40 +08:00
private
def order_name
Issue . column_names . include? ( params [ :order_name ] ) ? params [ :order_name ] : 'updated_on'
end
def order_type
%w( desc asc ) . include? ( params [ :order_type ] ) ? params [ :order_type ] : 'desc'
end
2020-05-08 14:33:19 +08:00
end