summaryrefslogtreecommitdiff
path: root/app/graphql/resolvers/concerns/time_frame_arguments.rb
blob: 6cac46a71d256632ac967e0603a93a8d847afbac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frozen_string_literal: true

module TimeFrameArguments
  extend ActiveSupport::Concern

  OVERLAPPING_TIMEFRAME_DESC = 'List items overlapping a time frame defined by startDate..endDate (if one date is provided, both must be present)'

  included do
    argument :start_date, Types::TimeType,
             required: false,
             description: OVERLAPPING_TIMEFRAME_DESC,
             deprecated: { reason: 'Use timeframe.start', milestone: '13.5' }

    argument :end_date, Types::TimeType,
             required: false,
             description: OVERLAPPING_TIMEFRAME_DESC,
             deprecated: { reason: 'Use timeframe.end', milestone: '13.5' }

    argument :timeframe, Types::TimeframeInputType,
             required: false,
             description: 'List items overlapping the given timeframe.'
  end

  # TODO: remove when the start_date and end_date arguments are removed
  def validate_timeframe_params!(args)
    return unless %i[start_date end_date timeframe].any? { |k| args[k].present? }
    return if args[:timeframe] && %i[start_date end_date].all? { |k| args[k].nil? }

    error_message =
      if args[:timeframe].present?
        "startDate and endDate are deprecated in favor of timeframe. Please use only timeframe."
      elsif args[:start_date].nil? || args[:end_date].nil?
        "Both startDate and endDate must be present."
      elsif args[:start_date] > args[:end_date]
        "startDate is after endDate"
      end

    if error_message
      raise Gitlab::Graphql::Errors::ArgumentError, error_message
    end
  end
end