Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/graphql/resolvers')
-rw-r--r--app/graphql/resolvers/board_list_issues_resolver.rb4
-rw-r--r--app/graphql/resolvers/board_lists_resolver.rb4
-rw-r--r--app/graphql/resolvers/ci/runners_resolver.rb4
-rw-r--r--app/graphql/resolvers/concerns/board_item_filterable.rb (renamed from app/graphql/resolvers/concerns/board_issue_filterable.rb)6
-rw-r--r--app/graphql/resolvers/concerns/time_frame_arguments.rb8
-rw-r--r--app/graphql/resolvers/milestones_resolver.rb10
-rw-r--r--app/graphql/resolvers/projects/services_resolver.rb12
-rw-r--r--app/graphql/resolvers/projects_resolver.rb7
-rw-r--r--app/graphql/resolvers/timelog_resolver.rb108
9 files changed, 77 insertions, 86 deletions
diff --git a/app/graphql/resolvers/board_list_issues_resolver.rb b/app/graphql/resolvers/board_list_issues_resolver.rb
index 29e66a59a15..dac93b91469 100644
--- a/app/graphql/resolvers/board_list_issues_resolver.rb
+++ b/app/graphql/resolvers/board_list_issues_resolver.rb
@@ -2,7 +2,7 @@
module Resolvers
class BoardListIssuesResolver < BaseResolver
- include BoardIssueFilterable
+ include BoardItemFilterable
argument :filters, Types::Boards::BoardIssueInputType,
required: false,
@@ -13,7 +13,7 @@ module Resolvers
alias_method :list, :object
def resolve(**args)
- filter_params = issue_filters(args[:filters]).merge(board_id: list.board.id, id: list.id)
+ filter_params = item_filters(args[:filters]).merge(board_id: list.board.id, id: list.id)
service = ::Boards::Issues::ListService.new(list.board.resource_parent, context[:current_user], filter_params)
offset_pagination(service.execute)
diff --git a/app/graphql/resolvers/board_lists_resolver.rb b/app/graphql/resolvers/board_lists_resolver.rb
index 0b699006626..4dae3b4a9d1 100644
--- a/app/graphql/resolvers/board_lists_resolver.rb
+++ b/app/graphql/resolvers/board_lists_resolver.rb
@@ -2,7 +2,7 @@
module Resolvers
class BoardListsResolver < BaseResolver
- include BoardIssueFilterable
+ include BoardItemFilterable
include Gitlab::Graphql::Authorize::AuthorizeResource
include LooksAhead
@@ -22,7 +22,7 @@ module Resolvers
def resolve_with_lookahead(id: nil, issue_filters: {})
lists = board_lists(id)
- context.scoped_set!(:issue_filters, issue_filters(issue_filters))
+ context.scoped_set!(:issue_filters, item_filters(issue_filters))
List.preload_preferences_for_user(lists, current_user) if load_preferences?
diff --git a/app/graphql/resolvers/ci/runners_resolver.rb b/app/graphql/resolvers/ci/runners_resolver.rb
index 710706325cc..3ad1e2780dd 100644
--- a/app/graphql/resolvers/ci/runners_resolver.rb
+++ b/app/graphql/resolvers/ci/runners_resolver.rb
@@ -17,6 +17,10 @@ module Resolvers
required: false,
description: 'Filter by tags associated with the runner (comma-separated or array).'
+ argument :search, GraphQL::STRING_TYPE,
+ required: false,
+ description: 'Filter by full token or partial text in description field.'
+
argument :sort, ::Types::Ci::RunnerSortEnum,
required: false,
description: 'Sort order of results.'
diff --git a/app/graphql/resolvers/concerns/board_issue_filterable.rb b/app/graphql/resolvers/concerns/board_item_filterable.rb
index 88de69a3844..1457a02e44f 100644
--- a/app/graphql/resolvers/concerns/board_issue_filterable.rb
+++ b/app/graphql/resolvers/concerns/board_item_filterable.rb
@@ -1,11 +1,11 @@
# frozen_string_literal: true
-module BoardIssueFilterable
+module BoardItemFilterable
extend ActiveSupport::Concern
private
- def issue_filters(args)
+ def item_filters(args)
filters = args.to_h
set_filter_values(filters)
@@ -32,4 +32,4 @@ module BoardIssueFilterable
end
end
-::BoardIssueFilterable.prepend_mod_with('Resolvers::BoardIssueFilterable')
+::BoardItemFilterable.prepend_mod_with('Resolvers::BoardItemFilterable')
diff --git a/app/graphql/resolvers/concerns/time_frame_arguments.rb b/app/graphql/resolvers/concerns/time_frame_arguments.rb
index 6cac46a71d2..0ec3c642f29 100644
--- a/app/graphql/resolvers/concerns/time_frame_arguments.rb
+++ b/app/graphql/resolvers/concerns/time_frame_arguments.rb
@@ -39,4 +39,12 @@ module TimeFrameArguments
raise Gitlab::Graphql::Errors::ArgumentError, error_message
end
end
+
+ def transform_timeframe_parameters(args)
+ if args[:timeframe]
+ args[:timeframe].transform_keys { |k| :"#{k}_date" }
+ else
+ args.slice(:start_date, :end_date)
+ end
+ end
end
diff --git a/app/graphql/resolvers/milestones_resolver.rb b/app/graphql/resolvers/milestones_resolver.rb
index c94e3d9e1d8..1241b41501d 100644
--- a/app/graphql/resolvers/milestones_resolver.rb
+++ b/app/graphql/resolvers/milestones_resolver.rb
@@ -44,15 +44,7 @@ module Resolvers
title: args[:title],
search_title: args[:search_title],
containing_date: args[:containing_date]
- }.merge!(timeframe_parameters(args)).merge!(parent_id_parameters(args))
- end
-
- def timeframe_parameters(args)
- if args[:timeframe]
- args[:timeframe].transform_keys { |k| :"#{k}_date" }
- else
- args.slice(:start_date, :end_date)
- end
+ }.merge!(transform_timeframe_parameters(args)).merge!(parent_id_parameters(args))
end
def parent
diff --git a/app/graphql/resolvers/projects/services_resolver.rb b/app/graphql/resolvers/projects/services_resolver.rb
index db3037ec591..3674aa97e1f 100644
--- a/app/graphql/resolvers/projects/services_resolver.rb
+++ b/app/graphql/resolvers/projects/services_resolver.rb
@@ -12,19 +12,19 @@ module Resolvers
argument :active,
GraphQL::BOOLEAN_TYPE,
required: false,
- description: 'Indicates if the service is active.'
+ description: 'Indicates if the integration is active.'
argument :type,
Types::Projects::ServiceTypeEnum,
required: false,
- description: 'Class name of the service.'
+ description: 'Type of integration.'
alias_method :project, :object
def resolve(active: nil, type: nil)
- servs = project.integrations
- servs = servs.by_active_flag(active) unless active.nil?
- servs = servs.by_type(type) unless type.blank?
- servs
+ items = project.integrations
+ items = items.by_active_flag(active) unless active.nil?
+ items = items.by_type(type) unless type.blank?
+ items
end
end
end
diff --git a/app/graphql/resolvers/projects_resolver.rb b/app/graphql/resolvers/projects_resolver.rb
index 11d18a0a080..665ec796cd3 100644
--- a/app/graphql/resolvers/projects_resolver.rb
+++ b/app/graphql/resolvers/projects_resolver.rb
@@ -24,6 +24,10 @@ module Resolvers
required: false,
description: 'Sort order of results.'
+ argument :topics, type: [GraphQL::STRING_TYPE],
+ required: false,
+ description: 'Filters projects by topics.'
+
def resolve(**args)
ProjectsFinder
.new(current_user: current_user, params: project_finder_params(args), project_ids_relation: parse_gids(args[:ids]))
@@ -38,7 +42,8 @@ module Resolvers
non_public: params[:membership],
search: params[:search],
search_namespaces: params[:search_namespaces],
- sort: params[:sort]
+ sort: params[:sort],
+ topic: params[:topics]
}.compact
end
diff --git a/app/graphql/resolvers/timelog_resolver.rb b/app/graphql/resolvers/timelog_resolver.rb
index aebd04259ee..8ac30c4cb5d 100644
--- a/app/graphql/resolvers/timelog_resolver.rb
+++ b/app/graphql/resolvers/timelog_resolver.rb
@@ -7,106 +7,88 @@ module Resolvers
type ::Types::TimelogType.connection_type, null: false
argument :start_date, Types::TimeType,
- required: false,
- description: 'List time logs within a date range where the logged date is equal to or after startDate.'
+ required: false,
+ description: 'List time logs within a date range where the logged date is equal to or after startDate.'
argument :end_date, Types::TimeType,
- required: false,
- description: 'List time logs within a date range where the logged date is equal to or before endDate.'
+ required: false,
+ description: 'List time logs within a date range where the logged date is equal to or before endDate.'
argument :start_time, Types::TimeType,
- required: false,
- description: 'List time-logs within a time range where the logged time is equal to or after startTime.'
+ required: false,
+ description: 'List time-logs within a time range where the logged time is equal to or after startTime.'
argument :end_time, Types::TimeType,
- required: false,
- description: 'List time-logs within a time range where the logged time is equal to or before endTime.'
+ required: false,
+ description: 'List time-logs within a time range where the logged time is equal to or before endTime.'
def resolve_with_lookahead(**args)
- return Timelog.none unless timelogs_available_for_user?
+ build_timelogs
- validate_params_presence!(args)
- transformed_args = transform_args(args)
- validate_time_difference!(transformed_args)
+ if args.any?
+ validate_args!(args)
+ build_parsed_args(args)
+ validate_time_difference!
+ apply_time_filter
+ end
- find_timelogs(transformed_args)
+ apply_lookahead(timelogs)
end
private
+ attr_reader :parsed_args, :timelogs
+
def preloads
{
note: [:note]
}
end
- def find_timelogs(args)
- apply_lookahead(group.timelogs(args[:start_time], args[:end_time]))
+ def validate_args!(args)
+ if args[:start_time] && args[:start_date]
+ raise_argument_error('Provide either a start date or time, but not both')
+ elsif args[:end_time] && args[:end_date]
+ raise_argument_error('Provide either an end date or time, but not both')
+ end
end
- def timelogs_available_for_user?
- group&.user_can_access_group_timelogs?(context[:current_user])
- end
+ def build_parsed_args(args)
+ if times_provided?(args)
+ @parsed_args = args
+ else
+ @parsed_args = args.except(:start_date, :end_date)
- def validate_params_presence!(args)
- message = case time_params_count(args)
- when 0
- 'Start and End arguments must be present'
- when 1
- 'Both Start and End arguments must be present'
- when 2
- validate_duplicated_args(args)
- when 3 || 4
- 'Only Time or Date arguments must be present'
- end
-
- raise_argument_error(message) if message
+ @parsed_args[:start_time] = args[:start_date].beginning_of_day if args[:start_date]
+ @parsed_args[:end_time] = args[:end_date].end_of_day if args[:end_date]
+ end
end
- def validate_time_difference!(args)
- message = if args[:end_time] < args[:start_time]
- 'Start argument must be before End argument'
- elsif args[:end_time] - args[:start_time] > 60.days
- 'The time range period cannot contain more than 60 days'
- end
-
- raise_argument_error(message) if message
+ def times_provided?(args)
+ args[:start_time] && args[:end_time]
end
- def transform_args(args)
- return args if args.keys == [:start_time, :end_time]
+ def validate_time_difference!
+ return unless end_time_before_start_time?
- time_args = args.except(:start_date, :end_date)
-
- if time_args.empty?
- time_args[:start_time] = args[:start_date].beginning_of_day
- time_args[:end_time] = args[:end_date].end_of_day
- elsif time_args.key?(:start_time)
- time_args[:end_time] = args[:end_date].end_of_day
- elsif time_args.key?(:end_time)
- time_args[:start_time] = args[:start_date].beginning_of_day
- end
+ raise_argument_error('Start argument must be before End argument')
+ end
- time_args
+ def end_time_before_start_time?
+ times_provided?(parsed_args) && parsed_args[:end_time] < parsed_args[:start_time]
end
- def time_params_count(args)
- [:start_time, :end_time, :start_date, :end_date].count { |param| args.key?(param) }
+ def build_timelogs
+ @timelogs = Timelog.in_group(object)
end
- def validate_duplicated_args(args)
- if args.key?(:start_time) && args.key?(:start_date) ||
- args.key?(:end_time) && args.key?(:end_date)
- 'Both Start and End arguments must be present'
- end
+ def apply_time_filter
+ @timelogs = timelogs.at_or_after(parsed_args[:start_time]) if parsed_args[:start_time]
+ @timelogs = timelogs.at_or_before(parsed_args[:end_time]) if parsed_args[:end_time]
end
def raise_argument_error(message)
raise Gitlab::Graphql::Errors::ArgumentError, message
end
-
- def group
- @group ||= object.respond_to?(:sync) ? object.sync : object
- end
end
end