1# frozen_string_literal: true 2 3module Resolvers 4 class MergeRequestsResolver < BaseResolver 5 include ResolvesMergeRequests 6 extend ::Gitlab::Graphql::NegatableArguments 7 8 type ::Types::MergeRequestType.connection_type, null: true 9 10 alias_method :project, :object 11 12 def self.accept_assignee 13 argument :assignee_username, GraphQL::Types::String, 14 required: false, 15 description: 'Username of the assignee.' 16 end 17 18 def self.accept_author 19 argument :author_username, GraphQL::Types::String, 20 required: false, 21 description: 'Username of the author.' 22 end 23 24 def self.accept_reviewer 25 argument :reviewer_username, GraphQL::Types::String, 26 required: false, 27 description: 'Username of the reviewer.' 28 end 29 30 argument :iids, [GraphQL::Types::String], 31 required: false, 32 description: 'Array of IIDs of merge requests, for example `[1, 2]`.' 33 34 argument :source_branches, [GraphQL::Types::String], 35 required: false, 36 as: :source_branch, 37 description: <<~DESC 38 Array of source branch names. 39 All resolved merge requests will have one of these branches as their source. 40 DESC 41 42 argument :target_branches, [GraphQL::Types::String], 43 required: false, 44 as: :target_branch, 45 description: <<~DESC 46 Array of target branch names. 47 All resolved merge requests will have one of these branches as their target. 48 DESC 49 50 argument :state, ::Types::MergeRequestStateEnum, 51 required: false, 52 description: 'Merge request state. If provided, all resolved merge requests will have this state.' 53 54 argument :labels, [GraphQL::Types::String], 55 required: false, 56 as: :label_name, 57 description: 'Array of label names. All resolved merge requests will have all of these labels.' 58 argument :merged_after, Types::TimeType, 59 required: false, 60 description: 'Merge requests merged after this date.' 61 argument :merged_before, Types::TimeType, 62 required: false, 63 description: 'Merge requests merged before this date.' 64 argument :milestone_title, GraphQL::Types::String, 65 required: false, 66 description: 'Title of the milestone.' 67 argument :sort, Types::MergeRequestSortEnum, 68 description: 'Sort merge requests by this criteria.', 69 required: false, 70 default_value: :created_desc 71 argument :created_after, Types::TimeType, 72 required: false, 73 description: 'Merge requests created after this timestamp.' 74 argument :created_before, Types::TimeType, 75 required: false, 76 description: 'Merge requests created before this timestamp.' 77 78 negated do 79 argument :labels, [GraphQL::Types::String], 80 required: false, 81 as: :label_name, 82 description: 'Array of label names. All resolved merge requests will not have these labels.' 83 argument :milestone_title, GraphQL::Types::String, 84 required: false, 85 description: 'Title of the milestone.' 86 end 87 88 def self.single 89 ::Resolvers::MergeRequestResolver 90 end 91 92 def no_results_possible?(args) 93 project.nil? || some_argument_is_empty?(args) 94 end 95 96 def some_argument_is_empty?(args) 97 args.values.any? { |v| v.is_a?(Array) && v.empty? } 98 end 99 end 100end 101