120 lines
3.5 KiB
Ruby
120 lines
3.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
class ProjectMilestones < ::API::Base
|
|
include PaginationParams
|
|
include MilestoneResponses
|
|
|
|
before { authenticate! }
|
|
|
|
feature_category :issue_tracking
|
|
|
|
params do
|
|
requires :id, type: String, desc: 'The ID of a project'
|
|
end
|
|
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
|
|
desc 'Get a list of project milestones' do
|
|
success Entities::Milestone
|
|
end
|
|
params do
|
|
use :list_params
|
|
end
|
|
get ":id/milestones" do
|
|
authorize! :read_milestone, user_project
|
|
|
|
list_milestones_for(user_project)
|
|
end
|
|
|
|
desc 'Get a single project milestone' do
|
|
success Entities::Milestone
|
|
end
|
|
params do
|
|
requires :milestone_id, type: Integer, desc: 'The ID of a project milestone'
|
|
end
|
|
get ":id/milestones/:milestone_id" do
|
|
authorize! :read_milestone, user_project
|
|
|
|
get_milestone_for(user_project)
|
|
end
|
|
|
|
desc 'Create a new project milestone' do
|
|
success Entities::Milestone
|
|
end
|
|
params do
|
|
requires :title, type: String, desc: 'The title of the milestone'
|
|
use :optional_params
|
|
end
|
|
post ":id/milestones" do
|
|
authorize! :admin_milestone, user_project
|
|
|
|
create_milestone_for(user_project)
|
|
end
|
|
|
|
desc 'Update an existing project milestone' do
|
|
success Entities::Milestone
|
|
end
|
|
params do
|
|
use :update_params
|
|
end
|
|
put ":id/milestones/:milestone_id" do
|
|
authorize! :admin_milestone, user_project
|
|
|
|
update_milestone_for(user_project)
|
|
end
|
|
|
|
desc 'Remove a project milestone'
|
|
delete ":id/milestones/:milestone_id" do
|
|
authorize! :admin_milestone, user_project
|
|
|
|
milestone = user_project.milestones.find(params[:milestone_id])
|
|
Milestones::DestroyService.new(user_project, current_user).execute(milestone)
|
|
|
|
no_content!
|
|
end
|
|
|
|
desc 'Get all issues for a single project milestone' do
|
|
success Entities::IssueBasic
|
|
end
|
|
params do
|
|
requires :milestone_id, type: Integer, desc: 'The ID of a project milestone'
|
|
use :pagination
|
|
end
|
|
get ":id/milestones/:milestone_id/issues" do
|
|
authorize! :read_milestone, user_project
|
|
|
|
milestone_issuables_for(user_project, :issue)
|
|
end
|
|
|
|
desc 'Get all merge requests for a single project milestone' do
|
|
detail 'This feature was introduced in GitLab 9.'
|
|
success Entities::MergeRequestBasic
|
|
end
|
|
params do
|
|
requires :milestone_id, type: Integer, desc: 'The ID of a project milestone'
|
|
use :pagination
|
|
end
|
|
get ':id/milestones/:milestone_id/merge_requests' do
|
|
authorize! :read_milestone, user_project
|
|
|
|
milestone_issuables_for(user_project, :merge_request)
|
|
end
|
|
|
|
desc 'Promote a milestone to group milestone' do
|
|
detail 'This feature was introduced in GitLab 11.9'
|
|
end
|
|
post ':id/milestones/:milestone_id/promote' do
|
|
authorize! :admin_milestone, user_project
|
|
authorize! :admin_milestone, user_project.group
|
|
|
|
milestone = user_project.milestones.find(params[:milestone_id])
|
|
Milestones::PromoteService.new(user_project, current_user).execute(milestone)
|
|
|
|
status(200)
|
|
rescue Milestones::PromoteService::PromoteMilestoneError => error
|
|
render_api_error!(error.message, 400)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
API::ProjectMilestones.prepend_if_ee('EE::API::ProjectMilestones')
|