2020-02-05 07:09:15 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Resolvers
|
2020-08-10 14:09:54 -04:00
|
|
|
class MilestonesResolver < BaseResolver
|
2020-02-05 07:09:15 -05:00
|
|
|
include Gitlab::Graphql::Authorize::AuthorizeResource
|
|
|
|
include TimeFrameArguments
|
|
|
|
|
2020-07-30 14:09:39 -04:00
|
|
|
argument :ids, [GraphQL::ID_TYPE],
|
2020-08-10 14:09:54 -04:00
|
|
|
required: false,
|
|
|
|
description: 'Array of global milestone IDs, e.g., "gid://gitlab/Milestone/1"'
|
2020-02-05 07:09:15 -05:00
|
|
|
|
2020-07-30 14:09:39 -04:00
|
|
|
argument :state, Types::MilestoneStateEnum,
|
2020-08-10 14:09:54 -04:00
|
|
|
required: false,
|
|
|
|
description: 'Filter milestones by state'
|
2020-05-14 05:07:53 -04:00
|
|
|
|
2020-02-05 07:09:15 -05:00
|
|
|
type Types::MilestoneType, null: true
|
|
|
|
|
|
|
|
def resolve(**args)
|
|
|
|
validate_timeframe_params!(args)
|
|
|
|
|
|
|
|
authorize!
|
|
|
|
|
|
|
|
MilestonesFinder.new(milestones_finder_params(args)).execute
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def milestones_finder_params(args)
|
|
|
|
{
|
2020-07-30 14:09:39 -04:00
|
|
|
ids: parse_gids(args[:ids]),
|
2020-02-05 07:09:15 -05:00
|
|
|
state: args[:state] || 'all',
|
|
|
|
start_date: args[:start_date],
|
|
|
|
end_date: args[:end_date]
|
2020-07-30 14:09:39 -04:00
|
|
|
}.merge(parent_id_parameters(args))
|
2020-02-05 07:09:15 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def parent
|
2020-08-10 14:09:54 -04:00
|
|
|
synchronized_object
|
2020-02-05 07:09:15 -05:00
|
|
|
end
|
|
|
|
|
2020-07-30 14:09:39 -04:00
|
|
|
def parent_id_parameters(args)
|
|
|
|
raise NotImplementedError
|
2020-02-05 07:09:15 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
# MilestonesFinder does not check for current_user permissions,
|
|
|
|
# so for now we need to keep it here.
|
|
|
|
def authorize!
|
|
|
|
Ability.allowed?(context[:current_user], :read_milestone, parent) || raise_resource_not_available_error!
|
|
|
|
end
|
2020-05-14 05:07:53 -04:00
|
|
|
|
2020-07-30 14:09:39 -04:00
|
|
|
def parse_gids(gids)
|
|
|
|
gids&.map { |gid| GitlabSchema.parse_gid(gid, expected_type: Milestone).model_id }
|
2020-05-14 05:07:53 -04:00
|
|
|
end
|
2020-02-05 07:09:15 -05:00
|
|
|
end
|
|
|
|
end
|