78 lines
2.2 KiB
Ruby
78 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module CycleAnalyticsParams
|
|
extend ActiveSupport::Concern
|
|
|
|
def cycle_analytics_project_params
|
|
return {} unless params[:cycle_analytics].present?
|
|
|
|
params[:cycle_analytics].permit(:start_date, :created_after, :created_before, :branch_name)
|
|
end
|
|
|
|
def cycle_analytics_group_params
|
|
return {} unless params.present?
|
|
|
|
params.permit(:group_id, :start_date, :created_after, :created_before, project_ids: [])
|
|
end
|
|
|
|
def options(params)
|
|
@options ||= {}.tap do |opts|
|
|
opts[:current_user] = current_user
|
|
opts[:projects] = params[:project_ids] if params[:project_ids]
|
|
opts[:group] = params[:group_id] if params[:group_id]
|
|
opts[:from] = params[:from] || start_date(params)
|
|
opts[:to] = params[:to] if params[:to]
|
|
opts[:end_event_filter] = params[:end_event_filter] if params[:end_event_filter]
|
|
opts.merge!(params.slice(*::Gitlab::Analytics::CycleAnalytics::RequestParams::FINDER_PARAM_NAMES))
|
|
opts.merge!(date_range(params))
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def start_date(params)
|
|
case params[:start_date]
|
|
when '7'
|
|
7.days.ago
|
|
when '30'
|
|
30.days.ago
|
|
else
|
|
90.days.ago
|
|
end
|
|
end
|
|
|
|
def date_range(params)
|
|
{}.tap do |date_range_params|
|
|
date_range_params[:from] = to_utc_time(params[:created_after]).beginning_of_day if params[:created_after]
|
|
date_range_params[:to] = to_utc_time(params[:created_before]).end_of_day if params[:created_before]
|
|
end.compact
|
|
end
|
|
|
|
def to_utc_time(field)
|
|
date = field.is_a?(Date) || field.is_a?(Time) ? field : Date.parse(field)
|
|
date.to_time.utc
|
|
end
|
|
|
|
def permitted_cycle_analytics_params
|
|
params.permit(*::Gitlab::Analytics::CycleAnalytics::RequestParams::STRONG_PARAMS_DEFINITION)
|
|
end
|
|
|
|
def all_cycle_analytics_params
|
|
permitted_cycle_analytics_params.merge(current_user: current_user)
|
|
end
|
|
|
|
def request_params
|
|
@request_params ||= ::Gitlab::Analytics::CycleAnalytics::RequestParams.new(all_cycle_analytics_params)
|
|
end
|
|
|
|
def validate_params
|
|
if request_params.invalid?
|
|
render(
|
|
json: { message: 'Invalid parameters', errors: request_params.errors },
|
|
status: :unprocessable_entity
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
CycleAnalyticsParams.prepend_mod_with('CycleAnalyticsParams')
|