diff options
Diffstat (limited to 'app/graphql/resolvers')
-rw-r--r-- | app/graphql/resolvers/board_list_issues_resolver.rb | 4 | ||||
-rw-r--r-- | app/graphql/resolvers/board_lists_resolver.rb | 4 | ||||
-rw-r--r-- | app/graphql/resolvers/ci/runners_resolver.rb | 4 | ||||
-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.rb | 8 | ||||
-rw-r--r-- | app/graphql/resolvers/milestones_resolver.rb | 10 | ||||
-rw-r--r-- | app/graphql/resolvers/projects/services_resolver.rb | 12 | ||||
-rw-r--r-- | app/graphql/resolvers/projects_resolver.rb | 7 | ||||
-rw-r--r-- | app/graphql/resolvers/timelog_resolver.rb | 108 |
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 |